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# 在unity中更改Texture2D格式_C#_Unity3d - Fatal编程技术网

C# 在unity中更改Texture2D格式

C# 在unity中更改Texture2D格式,c#,unity3d,C#,Unity3d,我加载了一个Textured2D,它在ETC\u RGB4中表示,如何将其更改为另一种格式?说RGBA32。基本上我想从3个通道切换到4个,从每个通道4位切换到每个通道8位 谢谢您可以在运行时更改纹理格式 1。创建新的空Texture2D,并向TextureFormat参数提供RGBA32。这将使用RGBA32格式创建一个空纹理 2。使用Texture2D.GetPixels获取ETC\u RGB4格式的旧纹理的像素,然后使用Texture2D.SetPixels将这些像素放入从#1创建的新纹理

我加载了一个
Textured2D
,它在
ETC\u RGB4
中表示,如何将其更改为另一种格式?说
RGBA32
。基本上我想从3个通道切换到4个,从每个通道4位切换到每个通道8位


谢谢

您可以在运行时更改纹理格式

1。创建新的空
Texture2D
,并向
TextureFormat
参数提供
RGBA32
。这将使用
RGBA32
格式创建一个空纹理

2。使用
Texture2D.GetPixels
获取
ETC\u RGB4
格式的旧纹理的像素,然后使用
Texture2D.SetPixels
将这些像素放入从#1创建的新纹理中

3。调用
Texture2D。应用
以应用更改。就这样

一种简单的扩展方法:

public static class TextureHelperClass
{
    public static Texture2D ChangeFormat(this Texture2D oldTexture, TextureFormat newFormat)
    {
        //Create new empty Texture
        Texture2D newTex = new Texture2D(2, 2, newFormat, false);
        //Copy old texture pixels into new one
        newTex.SetPixels(oldTexture.GetPixels());
        //Apply
        newTex.Apply();

        return newTex;
    }
}
用法

public Texture2D theOldTextue;

// Update is called once per frame
void Start()
{
    Texture2D RGBA32Texture = theOldTextue.ChangeFormat(TextureFormat.RGBA32);
}

根据
GetRawTextureData
返回一个字节数组,而不是前面提到的
ETC\u RBG4
。这里有什么我不明白的吗?它是不清楚和混乱的,让我改变我的问题。