Unity千人战斗场景优化

在游戏开发过程中,我相信大家都会接触到游戏的优化这一步的。前期是把功能做出来就万事大吉了。后期就要想到玩家的体验,所以游戏的优化是必不可少的。当然最好的就是动手之前把优化策略这些提前想好。然后就一步一步来,不用再浪费时间专门优化了。优化游戏的方面有很多地方,比如逻辑的优化,UI的优化,算法的优化等等。那么我们怎么才能知道要优化哪里才是当务之急呢?又该怎么优化呢?今天我们来以大部分游戏都有的动画部分来做一个优化的案例吧。先上对比图:

以上都是实例900个盖伦,然后第一个场景是所有的盖伦都用Animation来播放动画,state面板的各个值。第二个是用到我们今天的优化策略做的。State面板的各个值。对比下,孰强孰弱,立见分晓。

优化的话,我们今天这里主要是降低Batches(也可以叫Drawcall),然后合批处理。同时优化动画,不使用动画组件来播放动画,用其他的方式。那么是怎么做的呢?先说如何不用动画组件来播放动画吧。我们的原理是这样的:我们把模型的动画的一些信息通过特定的方法,把动画的顶点位置和对应动画的时间记录起来,然后保存在一张纹理里面,然后再用特殊的Shader来配置材质,这样的话,即使没有动画组件,我们也能播放动画。那么具体是怎么做的呢?

首先,我们需要写编辑器扩展代码,然后再写特殊的烘焙类,烘焙类专门用来获取模型的动画信息并且保存起来,然后再用这些信息做一张纹理出来。这就是它的功能。这里直接贴上关键代码。具体的步骤就不一一说了,代码里都有。

当然全部的代码肯定不止这么点,一共也就500+行,不多。这里就贴出根据动画信息制作纹理的函数和特殊Shader的编写,其他的我就不贴了,大家有需要的可以找我拿到 点击链接即可加群 点击链接加入群聊【cocos/unity交流群】

推荐阅读更多精彩内容