admin管理员组

文章数量:1611204

1. 前言

最近在开发中遇到了一个问题(如下图),为什么在代码里要申明私有变量来保存Unity的transform的position属性呢?于是我就查阅相关资料,搞明白原因。

 2. 真相揭秘

如果不注意,会大意把transform.position当作字段(field),但是仔细看会发现它有get,set方法,是一个属性(property),position不是一个值类型的数据,是引用类型,也就是在用=赋值的时候,复制的是指针(地址),而不是position的数数值,这也是能够使用一个私有变量改变物体的position原因。

但是为什么要这么麻烦的设定一个私有变量来代替直接使用呢(直接调用多方便 <*_<*)?

也是抱着这个好奇,我搜索了一下,看到了一个博主的文章解释了这一点。调用transform时,内部会再调用internal method(这个方法是底层用C/C++实现),这样会导致速度有所降低,影响游戏性能。如果频繁调用transform的话,使用私有变量保存它的指针会有较好的效果。

在最后这位博主贴出了参考链接,如下:

详细参考:

http://forum.unity3d/threads/130359-How-does-caching-an-objects-transform-make-the-game-run-faster

http://forum.unity3d/threads/96908-Unity-should-internally-cache-transform-for-a-valid-speed-boost

http://forum.unity3d/threads/130365-CachedMB

3. 结束语

这次算是又涨知识了,在Unity的道路上前进了一小步。

本文参考了:https://blog.csdn/sakyaer/article/details/43057251 。

本文标签: 类型UnityPositiontransform