通过代码使Unity中的Texture2D可读

Dav*_*ita 8 c# texture2d unity-game-engine

我有一些AssetBundles,我想转换为.png图像文件.

它们是Texture2D资产,但问题是它们不是Read Enable,当我尝试将它们转换为带有的PNG时

var _bytes = _texture2d.EncodeToPNG();
Run Code Online (Sandbox Code Playgroud)

命令,我收到以下错误信息:

纹理'纹理名称'不可读,无法从脚本访问纹理内存.您可以在纹理导入设置中使纹理可读.

我真的无法访问纹理导入设置,因为它们来自资产包,一切都是用代码制作的.

有人有解决方法吗?

谢谢

Ily*_*ski 12

这是一个有效的解决方案:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 由于此解决方案依赖于 AssetDatabase(位于 UnityEditor 命名空间中),因此只能在编辑器中使用。但是,它在构建时失败了(找不到类型或命名空间名称“UnityEditor”。) (3认同)
  • 抱歉,这只适用于编辑器 (2认同)

gam*_*erm 5

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

  • 我认为问题是“通过代码在Unity中使Texture2D可读”而不是“通过Unity Inspector” (5认同)