この記事でのバージョン
Unity 5.5.1f1
はじめに
Unityでは、Textureの設定でRead/Writeを有効にすると、
GetPixelsを使う事でTextureの画素値を取得する事が出来るようになります。
//テクスチャの全画素値を取得
Color[] pixels = texture.GetPixels();
しかし、SpriteModeがMultipleの場合、元の大きな画像の画素値を取得してしまいます。
例えば以下のように128×128のSpriteを設定し、
このSpriteの全画素値(128×128=16384)を取得しようと思い、GetPixelsを使っても、
元画像の全画素値(2048×1024=2097152)を取得してしまいます。
//画素数をログ表示 Debug.Log("画素数 : " + GetComponent<SpriteRenderer>().sprite.texture.GetPixels().Length);
なので、設定したSpriteのみの全画素値を取得するメソッドを作りました!
今回はそれをご紹介!
なお画素値ではなくTextureを取得したい場合は以下の記事を参照のこと。
GetPixelList
コードは以下の通りです。
/// <summary> /// 入力されたスプライト部分だけの画素値をリストで取得 /// </summary> public static List<Color> GetPixelList(Sprite sprite){ //テクスチャから画素値を取得 Texture2D texture = sprite.texture; List<Color> texturePixelList = new List<Color>(texture.GetPixels()); //スプライトの位置とサイズを取得 int x = (int)sprite.textureRect.x, y = (int)sprite.textureRect.y, width = (int)sprite.textureRect.width, height = (int)sprite.textureRect.height; //スプライト部分の画素値だけ抜き出す List<Color> pixelList = new List<Color>(); for (int yNo = y; yNo < y + height; yNo++) { for (int xNo = x; xNo < x + width; xNo++) { pixelList.Add(texturePixelList[xNo + yNo * texture.width]); } } return pixelList; }
使い方は全画素値を取得したいSpriteを渡すだけです。
//画素数をログ表示 Debug.Log("画素数 : " + GetPixelList(GetComponent<SpriteRenderer>().sprite).Count);