Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过代码使Texture2D在Unity中可读_C#_Unity3d_Texture2d - Fatal编程技术网

C# 通过代码使Texture2D在Unity中可读

C# 通过代码使Texture2D在Unity中可读,c#,unity3d,texture2d,C#,Unity3d,Texture2d,我有一些AssetBundle要转换为.png图像文件 它们是Texture2D资产,但问题在于,当 我试着用一个 var _bytes = _texture2d.EncodeToPNG(); 命令时,我收到以下错误消息: 纹理“纹理名称”不可读,无法从脚本访问纹理内存。可以使纹理在中可读 纹理导入设置 我真的无法访问纹理导入设置,因为它们来自资产包,所有内容都是用代码制作的 有人有解决办法吗 感谢您在project中选择纹理,打开inspector窗口,将纹理类型设置为“高级”,切换“已启用

我有一些AssetBundle要转换为.png图像文件

它们是Texture2D资产,但问题在于,当 我试着用一个

var _bytes = _texture2d.EncodeToPNG();
命令时,我收到以下错误消息:

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

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

有人有解决办法吗


感谢您在project中选择纹理,打开inspector窗口,将纹理类型设置为“高级”,切换“已启用读写”。

以下是一个可行的解决方案:

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

你能让它可读吗?谢谢,奥尔多,但我不这么认为。当您在编辑器中导入纹理时,Textureimporter可以工作,但是图像已经转换为Texture2D对象并存储为AssetBundles,因此它们不再通过Textureimporter。恐怕这是不可能的,纹理根本不在项目中,我只有从Texture2D对象创建的AssetBundle,因此我无法在编辑器中进行任何编辑。我正在制作的实用程序加载这些组件包以便再次导出图像,这样我们就可以在Photoshop中编辑它们。你仍然可以将不可读的纹理渲染到RenderTexture中,然后读取它。很好,游戏开发。我将尝试解决方法,谢谢。这对于使用
新纹理2d(…)
制作的纹理无效。我如何读取这些纹理,或者在设置像素之前我应该使用Color[]吗?我认为问题是“通过代码使纹理2D在Unity中可读”而不是“通过Unity Inspector”非常感谢!由于此解决方案依赖于AssetDatabase(位于UnityEdit命名空间中),因此只能在编辑器中使用。但在生成时失败(找不到类型或命名空间名称“UnityEdit”)。很抱歉,这只适用于Editor@Schnodderbalken此脚本必须放在“编辑器”目录中。一个潜在问题是,运行此代码后,对该纹理的游戏对象引用将引发nullreferenceexception。