苍穹变 关于优化的部分 于2015年

作者:雨辰 发布于:2015-10-19 14:52 Monday 分类:Unity3D

关于优化。我认为游戏开发者对于性能优化这块不能忽略,不管未来硬件有多大提升,性能优化的话题永远都不会过时。如何做好性能优化?一句话:够用就 行。如果512的贴图能用就不要用1024的,使用变量的时候Byte能用就不要用Short。比如大家都比较困惑的贴图问题,到底是大图好还是小图好? 根据我们的经验,在正常视角下,一味追求大图不但不能提升画面效果(显卡会将其自动缩小),反而会降低GPU运算能力和画面品质。在微端游的开发上,有些 功能或资源,如果觉得有没有都行,那最好是砍掉。这方面还要做好资源的复用,比如你做了一匹狼,把这个狼放大就是大狼,缩小就是小狼,换白色贴就是白狼, 换黑色贴就是黑狼,这样可以有效地节约资源。此外,贴图要做成2的幂次方,尽量使用压缩的贴图格式。还有就是Update函数每一帧都去调 用,GameObject.Find是一个公认的比较费的方法,就不要在这个函数里使用,建议把一些真正需要缓存的数据提前缓存起来。还有一些关于场景的 优化方案,作为3D游戏,由于远小近大的特性,一定要启用LOD和MipMap。如果是全3D的应用,建议启用遮挡剔除,这对于减少渲染压力还是很有效果 的。从渲染和引擎的工作原理来说,尽量对场景物件通过Shader进行从近到远排序,我不太建议使用双面材质,尽管它看起来省面,却会影响光照,如果使用 不当,比如一个球形的双面材质,里面可能永远看不见,但显卡依然要对内侧进行渲染处理。

关于特效,只使用一个粒子的特效可以用模型片来替 代,这样做可以很大程度上节约内存。我们默认放一个粒子到场景中,默认最大粒子数是100个,这个粒子需要多少片就设定成多少,多了也是浪费。在动画方 面,用Unity进行动画编辑实际上很占内存,所以还是建议通过脚本来实现。 

关于编写代码。首先要避免直接持有对象的引用。此外,if语 句对于else语句的处理要格外重视,大多数的Bug都是因为else没有处理好导致的。函数名及变量名尽可能使用一套便于查询和理解的命名法来命名,函 数不要中间Return,最后单个类不要太大,这会影响代码的可读性。

要运用换装系统,如果玩家已经有了一款装备,该装备还有外显,玩家会 很乐意为此付费,毕竟他可以拿来炫耀。而且换装也是一种能实现游戏资源复用的有效方法,既丰富了场景也节约资源。换装分为蒙皮换装和非蒙皮换装,蒙皮换装 是根据骨骼信息,从角色身上找到相应的骨骼,然后把蒙皮绑在骨骼上,再把既有的蒙皮删掉。非蒙皮换装是指对于武器等一些挂件,把新的资源模型挂载到要绑定 的骨骼上。《苍穹变》是一款强调动态加载的游戏,不是一次性将游戏场景全部加载出来,而是动态性地加载。换装系统与动态加载技术不谋而合,可以说是双赢的 举措。此外为了换装,我们把蒙皮换了好几个组件,会增加一些Draw Call,如果换装完成后把这些模型进行合并,可以有效降低Draw Call。

关于场景资源管理,如上文所说,场景要分批次加载,因为现在的玩家耐心越来越差。要做好这一点就需要分清主次,做好分级处理。比如地形是首先要加载的,其次还有天空盒,最后再加载一些零碎的小物件。

物理效果可以提升用户体验,增加游戏打击感,但由于网络带宽及服务器同步的限制,只能在不影响到同步的情况下使用,比如角色死亡,头发、衣袖的摆动效果等。但物理引擎比较耗费资源,建议酌情使用。

摘自:http://www.freeteam.cn/site/FreeCMS/share/info/2015/4177.html

标签: Unity3D-优化性能

发表评论:

雨辰 joyimp|@2011-2018 京ICP备16030765号