在Unity3D中转换有什么作用?在幕后

时间:2019-12-16 09:46:14

标签: unity3d game-engine

由于Rider的缘故,我开始考虑转换在课堂上的实际作用。 当您调用实例transform.position时,它是GetComponent就是对象的变换,还是它在前面具有对它的引用?由于类的效率,我猜它不会一直GetComponent它,但是它实际上是如何知道这样的东西的。所有这些都与MonoBehaviour一起存储吗?

2 个答案:

答案 0 :(得分:1)

这是一个好问题,直接提供的任何文档中都不清楚。

根据same question answered over here: this.transform和this.gameObject都缓存在Component类中,这使它们比通用的GetComponent <>()更快。 通常,这使我无视这样的建议,即当人们能够缓存变量,变换,标签和gameObject属性时,永远不要使用GetComponent()。

作为一种额外的待遇,Transform类实现了IEnumerable,它基本上迫使它充当固定大小的数组。在this.transform属性上运行for-each循环,也可以让您遍历存储在当前对象的变换下的每个子变换。

如果您想自己挖一点,定义将存储在MonoBehaviour和GameObject都继承的Component类中。它们被隐藏在unityengine.coremodule.dll中。不幸的是,Unity's git-adventure中没有包含UnityEngine命名空间。

答案 1 :(得分:1)

我知道这个问题已经回答了,但是请记住,您不再需要担心多个GetComponent <>()调用,因为unity会进行后台缓存,所以不会对性能不利。