查看原文
其他

程序丨在Unity开发中,你需要注意这些优化点

vian 腾讯GWB游戏无界 2022-08-30

本文参与“Unity性能优化”征文活动,活动详情请点击:活动丨Unity文章有奖征集第一期:性能优化


以下是Unity开发中需要注意的一些优化点,送上的都是比较接地气的干货!


01

静态美术资源的输出


能合在一起整体输出的资源,尽量不要切开输出。


比如分享界面,分享按钮根据登录渠道展示不一样,动态元素除外,其他元素基本可作为一张整体背景资源输出即可。


02

UI相关大背景图处理方式


一般为了表现丰富,UI整张大背景资源也是常见的。



如上图UI大背景,别放到游戏内别打到ab包里去,一般可放到CDN上,用的时候根据背景的url用www加载下来。注意要美术严格控制输出资源大小!根据项目需要可定义一个限制大小如不能超过500K。


03

图集大小测试检查


实际开发中并不是把资源往目录放下就ok,一般一个目录下的资源我们会让其打包图集。尽量保证图集不超过1024*1024,我们可对打图集进行测试分析,以便提前知道图集大小问题。



以上例子目录下三张资源,测试图集256*256,符合正常。如果你在开发过程中发现测试图集大小超出了1024*1024,那么这时候要注意,先跟美术沟通优化资源,需要时可以分目录放,其实也就是分图集来处理。为什么说分图集,跟网络流量一个概念,流量大网络容易拥塞。所以尽量避免大图集的出现。虽然同图集对DC有优化,但并不是图集越大越好。


04

打ab包注意


提出公用目录,将项目内公用性比较强的资源统一放到该目录,注意不要把公用性较低的资源也一起放了,跟进实际项目去决定。因为该目录打ab包内容是被依赖的,进游戏就需要先把它加载进来的,否则其他ab包加载进来找不到依赖资源也显示不正常。


实际开发中很多情况会遇到AUI内有个X图标与BUI用的一个,可能CUI也有用到,但是这几个UI并不是进游戏就能打开或有入口触发打开的。这就是为什么不把X图标放到公共目录的一个原因。这中情况我们也可提出一个目录整理存放这些被公共到的资源,但该目录不进行ab打包,而是直接打包引用该目录资源的各个预制体,该情况下资源是被打包多份的。有以内存换外存的意思。


05

UGUI一些优化


5.1 透明边框避免过度绘制over draw,可去掉勾选Fill Center;



降低overdraw还有一种情况,系统AUI打开覆盖遮挡BUI,此时注意将BUI禁掉。


5.2 大部分Image和Text不需要响应事件,可以去掉RaycastTarget勾选;



5.3 布局UI时,同一深度的UI(Item)不要出现重叠。



5.4 对于有特效显示的UI,最好新挂个canvas节点供特效使用。


06

代码一些注意


6.1 尽量避免使用foreach;


6.2 尽量避免使用+来进行字符串连接;


6.3 尽量不要update函数中做复杂计算,如有需要,可以隔N帧(FixedUpdate)计算一次;


6.4 尽量减少函数调用栈,用x = (x > 0 ? x : -x)代替x = Mathf.Abs(x);


6.5 使用内建的常量,例如Vector3.zero等等,避免频繁创建相同的对象;


6.6 引用一个游戏对象的逻辑,可以在start函数里去定义它,如记录transform等;


6.7 尽量不主动调用GC,养成良好代码习惯。如果需要可在游戏暂停,切场景GC一次;


6.8 避免频繁的调用Find、GetComponent等;


6.9 用go.CompareTag (“XX”)来代替go.tag == “XX”;


6.10 尽量不要动态的Instantiate和destroy object,使用object pool;

 

以上是简要整理分享的干货,Unity相关优化是聊不完的话题,随个人开发习惯与经验累积,优化的道路才会越走越顺畅!


今日推荐  

·Unity初学者的性能优化方案

·如何在Unity实现AR中的现实背景效果?

·《怪物猎人世界》技术美术设计师:我们用这10种工具制作高品质效果

↓↓↓点击阅读原文,了解更多。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存