Unity中Texture2DArray使用小結(jié)

本文記錄了在使用Texture2DArray時(shí)遇到的一些問題以及解決方案。
以下是最初的代碼,由Texture2D的數(shù)組,生成一個(gè)Texture2DArray:

    public Texture2D[] sourceTextures;

    private void CreateTexArray()
    {
        if (sourceTextures.Length == 0)
        {
            return;
        }

        //Create texture2DArray
        Texture2DArray texture2DArray = new Texture2DArray(sourceTextures[0].width,
            sourceTextures[0].height, sourceTextures.Length, sourceTextures[0].format, true, false);
        // Apply settings
        texture2DArray.filterMode = FilterMode.Bilinear;
        texture2DArray.wrapMode = TextureWrapMode.Repeat;

        for (int i = 0; i < sourceTextures.Length; i++)
        {
            texture2DArray.SetPixels(sourceTextures[i].GetPixels(), i, 0);
        }

        // Apply our changes
        texture2DArray.Apply(false);

        //Save 
        AssetDatabase.CreateAsset(texture2DArray, "Assets/TexArray.asset");
    }

調(diào)用方法,遇到的第一個(gè)問題:

GetPixels需源文件可讀寫
更改貼圖的Import Settings即可

接著又遇到了新的問題:

SetPixels需特定類型

設(shè)置其format 為 RGBA32可解決此問題:

Texture2DArray texture2DArray = new Texture2DArray(sourceTextures[0].width,
            sourceTextures[0].height, sourceTextures.Length, TextureFormat.RGBA32, true, false);

不過這樣的話,生成的Texture2DArray的體積就變大了。
考慮使用Graphics.CopyTexture來復(fù)制Texture。這樣還有一個(gè)好處是可不勾選源紋理為可讀寫的也行。

        for (int i = 0; i < sourceTextures.Length; i++)
        {
            for (int m = 0; m < sourceTextures[i].mipmapCount; m++)
            {
                Graphics.CopyTexture(sourceTextures[i], 0, m, texture2DArray, i, m);
            }
        }

但如果創(chuàng)建的是法線的Texture2DArray,和之前的表現(xiàn)有差異,需在新建Texture2DArray的時(shí)候設(shè)置linear為true

        Texture2DArray texture2DArray = new Texture2DArray(firstTexturePrototype.width,
            firstTexturePrototype.height, prototypeArray.Length, firstTexturePrototype.format, true, true);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容