web-dev-qa-db-ja.com

コードを介してUnityでTexture2Dを読み取り可能にする

.png画像ファイルに変換したいAssetBundleがいくつかあります。

これらはTexture2Dアセットですが、問題は、読み取りを有効にしないため、

var _bytes = _texture2d.EncodeToPNG();

コマンドを実行すると、次のエラーメッセージが表示されます。

テクスチャ 'テクスチャの名前'が読み取れません。スクリプトからテクスチャメモリにアクセスできません。テクスチャのインポート設定でテクスチャを読み取り可能にすることができます。

テクスチャインポート設定はアセットバンドルからのものであり、すべてがコードで作成されているため、実際にはアクセスできません。

誰かがこれの回避策を持っていますか?

ありがとう

8
DavidGuaita

プロジェクトでテクスチャを選択し、インスペクタウィンドウを開き、テクスチャタイプを「詳細」に設定し、「読み取りと書き込みを有効」に切り替えます。

実用的な解決策は次のとおりです。

public static void SetTextureImporterFormat( Texture2D texture, bool isReadable)
{
    if ( null == texture ) return;

    string assetPath = AssetDatabase.GetAssetPath( texture );
    var tImporter = AssetImporter.GetAtPath( assetPath ) as TextureImporter;
    if ( tImporter != null )
    {
        tImporter.textureType = TextureImporterType.Advanced;

        tImporter.isReadable = isReadable;

        AssetDatabase.ImportAsset( assetPath );
        AssetDatabase.Refresh();
    }
}
11