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