做新房网站怎么弄,如何做自媒体和网站签约赚点击,太原网站建设乛薇,关键词数据分析工具有哪些1. Share calculation output
和上一个Tip很像#xff0c;可以缓存计算结果或者各种信息#xff0c;避免多次重复的计算#xff0c;例如在场景里查找一个物体#xff0c;从文件读取数据#xff0c;解析Json等等。 容易忽略的点是常常在基类了实现了某个方法#xff0c;在…1. Share calculation output
和上一个Tip很像可以缓存计算结果或者各种信息避免多次重复的计算例如在场景里查找一个物体从文件读取数据解析Json等等。 容易忽略的点是常常在基类了实现了某个方法在子类里只是不断的使用而不再去注意基类里的这个方法是否消耗很大如果遇到性能问题可以通过Profiler定位函数进而优化作者的建议是除非真的遇到了性能瓶颈否则提前的优化并没有必要。个人理解是过度的优化未必是合理的会影响代码的可读性以及简洁性需要和性能达到合理的平衡。 2. Update, Coroutines, and InvokeRepeating
我们经常使用Update去处理一些事务但是其实有很多时候并没有必要需要这么频繁每帧比如下边这个例子 并没有必要每帧都去调用AI系统处理可以这样写减少调用频率降低CPU开销 也可以使用Coroutine来完成这个功能千万别搞混Coroutine和线程它俩完全是俩码事Coroutine是跑在主线程的。 这么写的好处就是可以根据_aiProcessDelay变量随心所欲控制调用频率但是也有很多缺点。
1.Coroutine 会有额外的CPU开销大概是3倍于普通函数而且会有额外的一些内存消耗用来存储状态变量等。Coroutine会不停的调用yield这玩意也会不断的产生开销所以我们要权衡是否降低调用频率带来的好处值得这么干。 Coroutine消耗大概是3倍 2.一旦初始化后Coroutines就放飞自我了Component甭管是否disabled掉它们会一直的在调用。
3.当GameObject 变成inactive时whether it was set inactive or one of its parents wasCoroutine 会自动挂掉并且再也不会自动启动即使重新变成active也没辙停了就别想让我自动活过来。
4.改成Coroutine只是降低了频率如果函数消耗特别大即使调用次数变少被调用的那一帧依然会产生很大消耗造成帧率下降。所以对于是因为函数消耗大的情形使用coroutine也没鸟用的只能去优化该函数降低消耗才是正途。
当使用Coroutine时有多种yield 种类可以供我们选择。包括WaitForSeconds 和 WaitForSecondsRealTime等WaitForSecondsRealTime不受Time.Scale影响。如果Coroutine够简单可以直接改造成使用InvokeRepeating它使用起来更简单而且消耗会稍微小一丢丢。 InvokeRepeating和Coroutines的最主要区别是InvokeRepeating已经完全独立于MonoBehaviour和GameObject的状态放飞自我的更狂野想停下InvokeRepeating, 只能通過CancelInvoke函数或者直接Destory掉相关的Monobehaviour或者GameObjectdisable掉Monobehaviour或者GameObject都拦不住这个已飞起来的InvokeRepeating
3. Faster GameObject null reference checks
GameObject 和 Monobehaviour对于传统的C# object是很特殊的它俩在内存中会有两种形式一种是存在于Managed memory和C#代码存放的内存一样 Managed Code一种是存在于Native memoryNative Code更多的原理将在第八章中介绍。这里我个人解释几句Unity的内存可以分为两种托管堆Managed和Native。托管堆是我们写的C#代码Native是Unity底层的代码Unity底层其实是C写的。像GameObject 和 Monobehaviour这种由Unity提供的类它们将会在两种内存中存在数据可以在这两种内存中传输但是每次传输都会有开销。这种行为可以叫做Native-Managed Bridge就想Native和Managed两部分内存的桥梁一样当需要从这部分内存传到另一部分时就会产生内存数据的copy也会需要GC。
对于判断GameObject是否为Null这件事一种简单写法是 但是这种写法会触发Native-Managed BridgeGameObject从native到managed。所以开销会大一些。更有效的写法是 但是其实经过测试即使直接用null进行判断速度也没慢到哪去只是快和更快一点的区别真的是了胜于无。所以这里作者原话意思是也没多点性能提升但是重要的是引入了Managed和Native的概念这个是非常重要的在之后会非常经常的提及因为内存的优化主要就是跟这俩货打交道。