unity 更换standard shader

最近在优化内存的时候,发现了一个内存占用非常高的shader
太坑了、、、发布出来的web包 包体非常小,资源也非常少,却在进入场景的一瞬间内存暴涨到1个多G
通过Profiler观察,shaderlab占用273M,非常高(小项目,一共就用了几个shader)
看工程内使用最多的shader是standard
做了一个测试,把standard换掉

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class ExchangeMaterials : MonoBehaviour
{
    
    
	[MenuItem("Tools/ExchangeMaterial")]
	static void ExchangeMaterials()
	{
    
    
		var allMaterials = AssetDatabase.FindAssets("t: Material");
		foreach (var guid in allMaterials)
		{
    
    
			var path = AssetDatabase.GUIDToAssetPath(guid);
			Material m = AssetDatabase.LoadAssetAtPath(path, typeof(Material)) as Material;
			if (m != null)
			{
    
    
				if (m.shader.name == "Standard")
				{
    
    
					m.shader = Shader.Find("AAA");
				}
			}
		}
	}
}

找出项目中所有的standard更换为测试shader,此时发现有些shader不能被取出来更换
在这里插入图片描述
又一阵挠头之后发现是FBX导入的设置相关
在这里插入图片描述这样设置参数,会生成一个模型自带的material,就可以更换shader啦

重新打包,发现出包速度快了好多倍,心里预感这次一定是找到了方向,O(∩_∩)O哈哈~
运行之后内存减少了600M+,内存终于降下来了,也有点心有余悸,没想到一个没观察到的小小细节内存占用这么高!!!此时再看Profiler,shaderlab占用只有1.1M了、、、

猜你喜欢

转载自blog.csdn.net/u014481027/article/details/125389317
今日推荐