1. 前言
最近在开发中遇到了一个问题(如下图),为什么在代码里要申明私有变量来保存Unity的transform的position属性呢?于是我就查阅相关资料,搞明白原因。
2. 真相揭秘
如果不注意,会大意把transform.position当作字段(field),但是仔细看会发现它有get,set方法,是一个属性(property),position不是一个值类型的数据,是引用类型,也就是在用=赋值的时候,复制的是指针(地址),而不是position的数数值,这也是能够使用一个私有变量改变物体的position原因。
但是为什么要这么麻烦的设定一个私有变量来代替直接使用呢(直接调用多方便 <*_<*)?
也是抱着这个好奇,我搜索了一下,看到了一个博主的
文章
解释了这一点。调用transform时,内部会再调用internal method(这个方法是底层用C/C++实现),这样会导致速度有所降低,影响游戏性能。如果频繁调用transform的话,使用私有变量保存它的指针会有较好的效果。
在最后这位博主贴出了参考链接,如下:
详细参考:
http://forum.unity3d.com/threads/130359-How-does-caching-an-objects-transform-make-the-game-run-faster
http://forum.unity3d.com/threads/96908-Unity-should-internally-cache-transform-for-a-valid-speed-boost
http://forum.unity3d.com/threads/130365-CachedMB
3. 结束语
这次算是又涨知识了,在Unity的道路上前进了一小步。
本文参考了:
https://blog.csdn.net/sakyaer/article/details/43057251
。