Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making a Texture2D readable in Unity via code [duplicate]

I have some AssetBundles that I want to convert to .png image files.

They are Texture2D assets, but the problem is as they are not Read Enable, when I try to convert them to PNG with a

var _bytes = _texture2d.EncodeToPNG();

command, I get the following error message:

Texture 'name of a texture' is not readable, the texture memory can not be accessed from scripts. You can make the texture readable in the Texture Import Settings.

I really can't access the Texture Import Settings, as they come from asset bundles and everything is made with code.

Somebody has a workaround for this?

Thanks

like image 386
DavidGuaita Avatar asked Aug 07 '14 06:08

DavidGuaita


1 Answers

Here's a working solution:

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();
    }
}
like image 57
Ilya Suzdalnitski Avatar answered Sep 23 '22 09:09

Ilya Suzdalnitski