通过代码使Texture2D在Unity中可读

本文关键字:Unity Texture2D 代码 | 更新日期: 2023-09-27 18:16:56

我有一些AssetBundles,我想转换成。png图像文件。

他们是Texture2D资产,但问题是,因为他们不是读取启用,当我尝试用

将它们转换为PNG
var _bytes = _texture2d.EncodeToPNG();
命令,我得到以下错误消息:

Texture 'name of a Texture '是不可读的,不能从脚本访问纹理内存。可以使纹理可读纹理导入设置。

我真的无法访问纹理导入设置,因为它们来自资源包,所有东西都是用代码制作的。

有人有解决方法吗?

谢谢

通过代码使Texture2D在Unity中可读

这是一个可行的解决方案:

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();
    }
}

在项目中选择纹理,打开检查器窗口,将纹理类型设置为"Advanced",切换为"启用读写"