[Unity]踩坑:Texture2D.alphaIsTransparency

2019/09 01 17:09

    static public void ImportTex(string textureAsset)
    {
        if (string.IsNullOrEmpty(textureAsset))
        {
            return;
        }
 
        AssetDatabase.Refresh(ImportAssetOptions.Default);
 
        TextureImporter ti = (TextureImporter)TextureImporter.GetAtPath(textureAsset);
        if (ti != null)
        {
            ti.isReadable = false;
            ti.mipmapEnabled = false;
            ti.alphaIsTransparency = true;
            ti.filterMode = FilterMode.Bilinear;
            ti.wrapMode = TextureWrapMode.Clamp;
            ti.npotScale = TextureImporterNPOTScale.None;
            ti.textureCompression = TextureImporterCompression.Uncompressed;
            ti.SaveAndReimport();
        }
        else
        {
            Log.Error("Import Fail:{0}", textureAsset);
        }
    }

以上代码, 设置了alphaIsTransparency属性;或者在Unity的Inspector中,对纹理勾选这个选项,那么Unity会做什么事情呢?

如果有一张PNG图片, 95%的地方是全透明的,而在全透明的地方,RGB值是有意义的;

如果设置了alphaIsTransparency属性,则全透明的地方,Unity会将RGB值全部丢失!!!

所以:

如果要使用此纹理的4个通道做数据存储时(比如地型的4通道混合)

千万不能勾选alphaIsTransparency属性

除非此PNG图片仅仅用于UI显示;

这点在官方文档上没有说明