いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU

Unity : テクスチャからGetPixelしたときにエラー

{スポンサーリンク}
{スポンサーリンク}

Textureからピクセルデータを取得したく、 Texture2D#GetPixels を使って以下のように読み出そうと試みた。

    void GetSpritePixels(Sprite sprite) {
            Texture2D srcTexture = sprite.texture;

            Color[] colors = srcTexture.GetPixels(
                (int)Mathf.Floor(sprite.rect.x),
                (int)Mathf.Floor(sprite.rect.y),
                (int)Mathf.Floor(sprite.rect.width),
                (int)Mathf.Floor(sprite.rect.height)
            );
    }

が、エディタ拡張スクリプトから実行したところ、下のようなログを吐いてエクセプションが発生してしまった。

Cannot access pixel data of compressed texture formats which cannot be partially decompressed (such as Crunch).
UnityEngine.Texture2D:GetPixels(Int32, Int32, Int32, Int32)

どうも PVRTC_〜という形式の画像からは、GetPixelsで色を取得できないらしい。
たぶん下の表で compressed とついているフォーマットは全部そう。

Unity - Scripting API: TextureFormat

GetPixelsしたいときはUncompressedなフォーマットに変更すればよい。

テクスチャのフォーマットを非圧縮形式にする

プロジェクト内でテクスチャを選択し、インスペクタを見る。

f:id:sugar_affordance:20170616193800p:plain

まず圧縮形式はプラットフォームごとに選択する必要があるようなので、タブから対象のプラットフォームの設定を表示。
つぎに Format 欄で非圧縮形式のフォーマットを選択する。

これでGetPixelできる。

テクスチャのインポート設定で Crunch を設定している場合

これでもできない場合、Crunchを有効にしているのかもしれない。

https://docs.unity3d.com/ScriptReference/Texture2D.GetPixels.html

GetPixels is not available on Textures using Crunch texture compression.

とあるので。
でも自分ではGetPixelできたので関係ないのかもしれない。
なぜだろう。

・参考

https://forum.unity3d.com/threads/getpixels-errors-with-pvrtc-compression-enabled.440132/

Amazon.co.jpアソシエイト