Unity 切换Shader耗CPU大

13 篇文章 1 订阅

在游戏中,怪物或者人受到攻击后,会有变白的效果。这个效果是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的性能分析器,在被攻击时暂停,可以看到:


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

Shader.CreateGPUProgram()

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

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

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


点击Editor - Project Setting - Graphics 


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值