Texture2DからGetPixelする
Assetとして読み込んだテクスチャやResourcesとして読み込める外部テクスチャは、
そのままではGetPixel/GetPixelsでテクスチャのピクセル情報にアクセスできません。
「GetPixel」「GetPixels」を呼ぶとエラーになります。
UnityException: Texture 'leaf_chip_01' is not readable, the texture memory can not be accessed from scripts. You can make the texture readable in the Texture Import Settings.
これのアクセス設定はImport Settingsにあります。
Assetsの画像を選択したInspectorで
「Texture Type」を「Advanced」に変更、
「Read/Write Enabled」のチェックボックスをOn、
「Default」のFormatを「RGB 24bit」または「RGBA 32bit」に変更、
としてApplyボタンを押します。
これで、リソースとして読み込んだテクスチャのGetPixelsを使用できます。
スクリプトで自動的にGetPixelできるようにする
以下はAssetDatabaseを使用しますので、android/iOSでは動作しません。
要 : using UnityEditor;
以下のように一時的にテクスチャにアクセスできるようにすると、以降はGetPixel/GetPixelsも使用できるようになります。
Texture2D tex = インポートしたテクスチャ. string assetPath = AssetDatabase.GetAssetPath(m_tex); TextureImporter ti = TextureImporter.GetAtPath(assetPath) as TextureImporter; bool oldIsReadable = ti.isReadable; TextureImporterFormat oldImporterFormat = ti.textureFormat; ti.isReadable = true; ti.textureFormat = TextureImporterFormat.RGBA32; AssetDatabase.ImportAsset(assetPath);
使い終わった後で、
ti.isReadable = oldIsReadable ; ti.textureFormat = oldImporterFormat; AssetDatabase.ImportAsset(assetPath);
として元に戻せばOKです。
最終更新時間:2013年11月09日 15時34分20秒