unity里面动态的替换shader | 您所在的位置:网站首页 › unity切换材质效果 › unity里面动态的替换shader |
在游戏中,怪物或者人受到攻击后,会有变白的效果。这个效果是Shader实现的。在判定被攻击的时候切换Shader。 [csharp] view plain copy Shader shader = getBeAttackShader(); material.shader = shader; [csharp] view plain copy static Shader s_BeattackShader = null; protected virtual Shader getBeAttackShader() { if(s_BeattackShader == null) { s_BeattackShader = Shader.Find("Custom/attack"); } return s_BeattackShader; } 代码没有问题,但是在4S等低端设备上,被攻击时会明显卡顿,时间长达1S。
于是用Unity的性能分析器,在被攻击时暂停,可以看到:
在OpenGL中用过Shader的同学们看到下面的函数名字就知道问题所在了 Shader.CreateGPUProgram() 这个函数过程就是创建GLProgram链接Shader的一个过程,在Unity3d中的Shader.Find()是直接创建GLProgram的。 如果是自己去写引擎,GLProgram一般在初始化的时候就会创建完毕,然后用类似GLProgramManager管理。 Unity中的问题我们也可以用这个方法解决,但是Unity提供了简便方法。 点击Editor - Project Setting - Graphics
右侧 Always Included Shaders,把我们需要使用的Shader拖到里面去吧 |
CopyRight 2018-2019 实验室设备网 版权所有 |