查看: 1953|回复: 1
打印 上一主题 下一主题

[经验分享] Unity3D代码性能优化

[复制链接]
may    

8830

主题

80

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52304
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2018-12-31 19:05:07 |只看该作者 |倒序浏览

来自: 实践者

1)避免使用GameObject.Find!
许多学习资源将教授在学习脚本的早期阶段使用GameObject.Find。 尽可能方便,尽量不要使用它。原因:
a)每当调用此函数时,它将遍历整个层次结构以查找具有匹配名称的GameObject。 如果你有一个包含许多GameObjects的大型Hierarchy并且你不断地调用它,那么它将显着降低你的性能
b)重命名你的GameObject会打破脚本! 如果您的脚本中有一个工作引用到现有GameObject,并且由于某种原因您将其重命名为该行,则找不到GameObject并为函数调用返回null。

2)何时何地使用GetComponent
a)与#1类似,无论何时调用GetComponent,它都会对当前GameObject的组件进行线性搜索,以查找MonoBehaviour引用。 如果您经常这样做,或者如果您在Update功能中,并且您的GameObject上有许多组件,它可以加起来。
那么什么时候可以使用GetComponent?
b)如果使用GetComponent在场景开始时分配引用(例如,在Start()或Awake()函数中),则只调用一次。 您只需在场景开始时获得一小段性能,但在加载完所有内容后,您将直接引用MonoBehaviour,这意味着可以直接快速地访问所有内容。 如果我不想使用GetComponent,我有什么选择?
在MonoBehaviour脚本中,您可以执行以下操作来序列化您的参考
[SerializeField]private AudioSource audioSource;
--- or --
public AudioSource audioSource;

3)Camera.main困境
许多教程将使用Camera.main来获取场景中的主摄像头。 每当你调用这个函数时,Unity实际上都会调用GameObject.FindGameObjectsWithTag(“MainCamera”)。 此调用遍历整个层次结构,直到它找到第一个启用了具有MainCamera标记的GameObject并检索其Camera组件(如果存在)。 注意:这不是缓存的。
使用Unity UI(UGUI)时,无论何时创建Canvas并将渲染模式设置为屏幕空间 - 摄像机或屏幕空间 - World,它都会要求您选择渲染摄像机。 如果你没有选择一个,它实际上会调用Camera.main函数来尝试将当前的Canvas调整到一定的大小。

4)更智能地实例化GameObjects
大多数人都没有意识到GameObject.Instantiate函数有很多重载构造函数,最重要的一个应该是这个:
public static Object Instantiate(Object original, Transform parent);
使用这种实例化方法,直接在提供的父物体transform下创建新的GameObject。 或者,如果您未提供此父Transform,则必须首先在根Transform下创建它并重新父实例化新实例化的GameObject。 这种额外的分配可能是浪费的。 进行这一小改动可以将性能提高5-10%。

5)点击一下优化SkinnedMeshRenderers
每当您使用骨骼装备导入FBX时,Unity都会将其视为SkinnedMeshRenderer,因此将在层次结构中为FBX中的每个骨骼创建一个Transform。 如果你没有对装备的变形做任何事情(即将武器绑定到手或帽子到头部),这些变换不做任何事情,并且每帧执行无意义的计算。 要优化此选项,请在“项目”窗口中选择FBX,然后导航到“钻机”选项卡。

应该有一个复选框标签Optimize Game Objects位于底部。 检查并应用设置后,您将看到转换已消失。 如果仍然需要用手和头部将其他对象绑定到装备,则可以根据需要单独显示这些对象,方法是将Extra Transforms展开为Expose并在装备中添加单个Transforms。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

0

主题

5

听众

1136

积分

助理设计师

Rank: 4

纳金币
0
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2019-1-2 05:29:05 |只看该作者
thanks for sharing your knowledge. i found it very informative
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-4-25 09:48 , Processed in 0.084654 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部