unity3D技术分享Unity游戏开发经验分享

Unity - 性能优化实战04 - Texture优化

2023-08-09  本文已影响0人  能不写代码么

UPR优化建议


自定义导入设置

可以看到上文有很多要优化的内容,一个一个找到修改真的费时费力,所以写了一个工具保证了资源的规范性。当然还是有很多不完善的后续一点点补充进来

using System.IO;
using UnityEditor;
using UnityEngine;

namespace Game.Editor
{
    public class CustomAssetImporter : AssetPostprocessor
    {
        private void OnPreprocessTexture()
        {
            var importer = assetImporter as TextureImporter;

            //设置Read/Write Enabled开关,不勾选
            importer.isReadable = false;

            // Assets/Artworks下是美术库的全部贴图,分门别类的设置不同最大尺寸
            if (assetPath.StartsWith("Assets/Suntail Village/Textures"))
            {
                string fileName = Path.GetFileNameWithoutExtension(assetPath);
                if (fileName.EndsWith("_1024"))
                    importer.maxTextureSize = 1024;
                else if (fileName.EndsWith("_2048"))
                    importer.maxTextureSize = 2048;
                else
                    importer.maxTextureSize = 512;

                var androidSetting = importer.GetPlatformTextureSettings(BuildTargetGroup.Android.ToString());
                androidSetting.maxTextureSize = importer.maxTextureSize;
                if (!IsAllowTextureFormat(androidSetting.format))
                {
                    androidSetting.format = TextureImporterFormat.ASTC_8x8;
                }
                androidSetting.overridden = true;
                importer.SetPlatformTextureSettings(androidSetting);
            }
            // UI大图资源,设置好指定的安卓格式
            if (assetPath.StartsWith("Assets/Main/SpriteBig"))
            {
                var androidSetting = importer.GetPlatformTextureSettings(BuildTargetGroup.Android.ToString());
                androidSetting.maxTextureSize = importer.maxTextureSize;
                if (!IsAllowTextureFormat(androidSetting.format))
                {
                    androidSetting.format = TextureImporterFormat.ASTC_8x8;
                }
                androidSetting.overridden = true;
                importer.SetPlatformTextureSettings(androidSetting);
            }
            if (importer.assetPath.StartsWith("Assets/Main/Sprites"))
            {
                //设置UI纹理Generate Mipmaps
                importer.mipmapEnabled = false;
                //设置UI纹理WrapMode
                importer.wrapMode = TextureWrapMode.Clamp;
            }
        }

        bool IsAllowTextureFormat(TextureImporterFormat format)
        {
            return format == TextureImporterFormat.ASTC_4x4 || format == TextureImporterFormat.ASTC_8x8 || format == TextureImporterFormat.ETC2_RGBA8;
        }
    }
}

优化对比

上一篇 下一篇

猜你喜欢

热点阅读