Unity 游戏优化---阅读笔记

第二章 脚本策略

  1. 使用Getcomponent<T>()方法最快,避免使用Getcomponent<string>。
  2. 避免在MonoBehaviour脚本文件中出现空定义,比如:空的Start()、Update()函数等。可以使用VS regex表达式搜索出空定义。(所有通用的Unity代码编辑工具都可)。
  3. 要达到60FPS,每帧应在16.667毫秒内完成所有Update()回调中的所有工作。而在Update()中,常见的性能问题: 
  • 反复计算很少或从不改变的值
  • 太多的组件计算一个可以共享的结果
  • 执行工作的频率远超必要值
  1. 尽量在Awake()中引用组件等,避免在Update()中引用。
  2. 共享计算输出
  3. 控制Update()中某些函数调用、协程的频率使用Time.deltaTime。
  4. 不要混淆协程和线程,线程以并发的方式在完全不同的CPU内核上运行,而且多个线程都可以同时运行。而协程以顺序的方式在主线程上运行,在任何给定时刻都只处理一个协程,每个协程通过yield语句决定何时暂停和继续。启动协程消耗成本大约是标准函数3倍。一旦初始化,不管组件是否禁用,都将继续调用协程。协程会在包含它的GameObject变为不活动时自动停止。如果GameObject重新设置为可用,协程不会自动启用。
  5. 协程应该尽量简单且独立于其他复杂子系统。因为协程很难调试且触发不稳定。
  6. 可考虑InvokeRepeating()替换使用WaitForSecond或WaitForSecondRealtime编写的简单函数。
  7. InvokeRepeating()完全独立于MonoBehavior和GameObject的状态。销毁关联的MonoBehaviour或它的父GameObject。禁用都不会停止,
  8. 避免从GameObject取出字符串属性,比如tag和name,会产生跨越本机-托管桥接。tag比较可以使用CompareTag()的方法。
  9. 使用合适的数据结构。希望遍历一组对象,最好使用列表。如果两个对象关联且有很多操作,最好使用字典。
  10. 避免运行时修改TransForm的父节点,因为会涉及到父节点的内存分配。
  11. 注意Transform的使用,Transform组件只存储与其父组件相关的数据。访问和修改Transform的position、rotation或scale属性会导致大量未预料的矩阵乘法计算。
  12. 避免的运行时使用Find()和SendMessage()方法。在大量物体的场景中就算在Awake()时使用Find()都是不推荐的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值