1.Obtain Components using the fastest method

Unity有多种Getcomponet的方法:

GetComponent(string),

GetComponent<T>()

GetComponent(typeof(T))

哪种效率最高会跟随Unity版本的变化而变化,对于Unity 2017,本书作者的测试是GetComponent<T>()方法最给力,和GetComponent(typeof(T))差不太多。至于GetComponent(string),可定是最差了,跟其他俩个方法有很大的差距,很容易理解,毕竟是用的是神坑的string作为参数啊

2.Remove empty callback definitions

Awake(), Start(), Update()等Unity自带的方法在没使用时删除掉。因为即使是空方法,Unity也需要在生命周期的对应时间点去调用函数,依然会有开销。关于Unity的生命周期,可以查看对应介绍https://docs.unity3d.com/Manual/ExecutionOrder.html

特别需要注意的是Start 和 Update方法。因为当创建一个脚本时,Unity为它默认的添加了这俩个方法。

例如Start()方法,虽然是在Instantiate时只调用一次,但是当同时有大量脚本需要调用各自的start方法时,就有可能会带来Scene初始化变慢,浪费CPU导致帧率下降和卡顿。

举个栗子,两个物体碰撞时,我们可能会搞个特效出来,再显示个伤害数字文本,再播个小音效等等,这一瞬间会对CPU做出很多变化,这一帧一下子要干一堆事。但是只有这一帧整个生命周期包括Start,Update该做的都做完了才能进行下一帧,此时就可能导致帧率下降。

作者做了个测试,30000个脚本,两组对照组,一组没有空的函数,一组有空的Start 和 Update,结果显而易见。

特别需要警惕的是一个GameObject可能会有多个component,如果componet都有没必要的空函数,后果很残忍。

要解决这个很简单,删掉空函数就ok了,各家IDE工具也都支持正则,下边这个正则就可以找到所有的空Update函数。对于OnGUI() OnEnable()等等其他函数都是同样道理。

Update要谨慎使用,Update函数常见的使用不当的情形:(水平有限,这段有点怎么翻译都难翻译出原味儿,直接看英文吧还是)

1.重复计算并不常用或根本没用过的value

2.承担了过多本可以共享结果的工作

3.对于一些工作其实没必要这么高的调用频率

3. Cache Component references

在Unity编程中,重复计算是一个常见的问题,特别是对于GetComponent()这种函数消耗更大(原理在之后的第八章会讲,是因为Native内存)

比如下边这个例子,每次计算Damage,都要重复获取rigidbody等5个脚本的引用,这对CPU很不友好,如果要是这函数是在Update函数里每帧都调用,那简直是灾难。

我们可以用一丢丢内存(32 or 64bits)来换取这部分性能,为将来的使用缓存这些引用。除非有极其严格的内存瓶颈,毫无疑问这种方式更nice,将会节省很多CPU资源。同样的道理对于计算Value也同样适用,计算一次缓存下来避免多次计算,都可以提高效率。

Unity 2017 Game Optimization 读书笔记(1)Scripting Strategies Part 1相关推荐

  1. Unity 2017 Game Optimization 读书笔记 Scripting Strategies Part 5

    一. Disable unused scripts and objects 场景中激活的物体或者脚本越多,开销越大.对于很多并没有产生作用的脚本和物体,可以隐藏掉从而提升性能,比如FPS游戏中视野外的 ...

  2. Unity 2017 Game Optimization 读书笔记(4)Scripting Strategies Part 4

    1.Avoid Find() and SendMessage() at runtime SendMessage() 方法和 GameObject.Find() 相关的一系列方法都是开销非常大的.Sen ...

  3. Unity 2017 Game Optimization 读书笔记(3)Scripting Strategies Part 3

    1.Avoid retrieving string properties from GameObjects 通常来讲,从C#的object中获取string 属性没有额外的内存开销,但是从Unity中 ...

  4. Unity 2017 Game Optimization 读书笔记(2)Scripting Strategies Part 2

    1. Share calculation output 和上一个Tip很像,可以缓存计算结果或者各种信息,避免多次重复的计算,例如在场景里查找一个物体,从文件读取数据,解析Json等等. 容易忽略的点 ...

  5. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (6)

    1. Use less texture data 这条优化技巧非常直接,减少texture的数据量,减少分辨率或者降低位数,虽然可能会降低渲染质量.但是通常使用16-bit textures并不会明显 ...

  6. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (5) Shader优化

    Shader optimization Fill Rate和 Memory Bandwidth开销最大的地方就是Fragment Shader.开销多大取决于Fragment Shader的复杂程度: ...

  7. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (4)

    Optimizing Unity UI 本章讲探讨一些能够提升UGUI性能的优化方法. 1.Use more Canvases 一个Canvas的主要任务就是管理它层级下的所有UI元素,并且通过Dra ...

  8. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics (3)

    Rendering performance enhancements Enable/Disable GPU Skinning 开启GPU Skinning可以减轻CPU或GPU中Front End部分 ...

  9. Unity 2017 Game Optimization 读书笔记 The Benefits of Batching

    batching(合批) 和大量的描述一个3D物体的数据有关系,比如meshes,verices,edges,UV coordinates 以及其他不同类型的数据.在Unity中谈论batching, ...

最新文章

  1. 10-18 JS基础复习笔记
  2. 面向对象笔记2 原型链 解释
  3. 什么才是真正的富贵?
  4. datatype未定义是什么意思_TypeError:无法读取未定义的属性'then'
  5. arm linux sms,基于arm处理器的手机短消息加密系统 encryption system for sms based on arm.pdf...
  6. 优秀的设计UI界面按钮素材,让点击率飙升
  7. “我很迷茫很焦虑,需要你的建议”|她在百度内网发了个求助帖
  8. python 多线程 线程池的四种实现方式
  9. vscode是付费的吗_Vscode
  10. 三次Hermite插值
  11. 手把手教你使用R语言做竞争风险模型并绘制列线图
  12. PHP在线网课问答题库搜索,推荐一个大学mooc网课答案题库在线查询公众号
  13. 两步解决WIN7 下IE经常未响应的假死现象
  14. java 引入微信sdk_手把手教您开发JAVA微信SDK-新手接入
  15. 对ADMEMS架构设计方法论的一点随笔
  16. matlab2016a配置vs2013编译器
  17. Shipyard的几个概念
  18. 信号处理中的反傅里叶变换(IFFT)原理
  19. 3ds_max入门教程
  20. c#设计模式(3)—— 利用观察者模式模拟推送消息

热门文章

  1. 前端 圆形进度图_CSS3+JS实现静态圆形进度条
  2. react使用link跳转传递参数_React-Typescript之路由跳转(使用this.props.history.push)
  3. delphi ascii字符数组_344. 反转字符串
  4. Moving stones(暴力+思维)
  5. Kate and imperfection CodeForces - 1333F(思维+数学)
  6. 编写mysql的工具_自己编写的数据库工具类
  7. mysql dba 试题_mysql dba面试题及答案.docx
  8. 学了C++不会STL,简直少了左膀右臂
  9. 图论--SCC强连通缩点--Tarjan
  10. [图神经网络] 图节点Node表示---GCN