在游戏中,怪物或者人受到攻击后,会有变白的效果。这个效果是Shader实现的。在判定被攻击的时候切换Shader。

Shader shader = getBeAttackShader();material.shader = shader;

    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的性能分析器,在被攻击时暂停,可以看到:

Unity 切换Shader耗CPU大


在OpenGL中用过Shader的同学们看到下面的函数名字就知道问题所在了

Shader.CreateGPUProgram()

这个函数过程就是创建GLProgram链接Shader的一个过程,在Unity3d中的Shader.Find()是直接创建GLProgram的。

如果是自己去写引擎,GLProgram一般在初始化的时候就会创建完毕,然后用类似GLProgramManager管理。

Unity中的问题我们也可以用这个方法解决,但是Unity提供了简便方法。

Unity 切换Shader耗CPU大

点击Editor - Project Setting - Graphics 


右侧 Always Included Shaders,把我们需要使用的Shader拖到里面去吧!

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

相关文章:

  • 2021-11-10
  • 2021-12-08
  • 2022-02-18
  • 2022-12-23
  • 2022-12-23
  • 2021-08-11
  • 2021-12-08
猜你喜欢
  • 2022-12-23
  • 2021-11-04
  • 2022-12-23
  • 2021-04-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案