Unity でテクスチャの画像をスクリプト上からいじる

Unity でテクスチャの画像をスクリプト上からいじる時のあれこれをメモします.

画像をスクリプトで読み込む

あらかじめ画像が用意されており,それをスクリプトから読み込む場合は,Texture2DのLoadImageを使用します.

Texture2D tex = new Texture2D(1, 1);
tex.LoadImage(File.ReadAllBytes(path)); // path は画像ファイルへのパス

LoadImage は,PNG or JPG 画像を読み込むものなので,それ以外の形式は読み込めません.
そのため,スクリプト内で画像を生成する場合は,一度それらの形式へ変更する必要があります.

画像をスクリプトで生成する

画像をスクリプトで生成する場合は,SetPixels を使用します.
以下のスクリプトは,3x3の赤い画像を生成して,texture に張り付ける処理です.

Color[] c = new Color[9];
for(int i = 0; i < 9; ++i)
{
  c[i].a = 1.0f;
  c[i].r = 1.0f;
  c[i].g = 0.0f;
  c[i].b = 0.0f;
}

Texture2D tex = new Texture2D(3, 3, TextureFormat.ARGB32, false);
tex.SetPixels(c);

Color とColor32 の違い

余談ですが,Unity には,Color とColor32 という二つのクラスがあります.
その違いは,Colorはrgba がfloat で,Color32 では,byte ということです. ただ,Color 内部で結局float から byte に変更されているので,Color32 を使用した方がパフォーマンスは高いようです.