Unity3D 中的变换有什么作用?幕后
What does transform do in Unity3D? behind the scenes
由于 Rider,我开始思考 transform 在 class 中的实际作用。
例如,当您调用 transform.position 时,它是 GetComponent 对象的转换还是预先引用它?我猜它不会因为 classes 的效率而不断地获取组件,但它实际上是如何知道这样的东西的。是否全部存储在 MonoBehaviour 中?
这是一个很好的问题,从直接提供的任何文档中看都不是很清楚。
根据 same question answered over here:
this.transform 和 this.gameObject 都缓存在组件 class 中,这使得它们比通用的 GetComponent<>() 对应物更快。
这通常使我忽略了以下建议:当能够缓存变量、转换、标签和游戏对象属性时,永远不要使用 GetComponent()。
另外,Transform class 实现了 IEnumerable,基本上强制它充当固定大小的数组。 运行 this.transform 属性 上的 for-each 循环也会让您遍历存储在当前对象变换下的每个子变换。
如果您想自己深入了解一下,定义存储在 MonoBehaviour 和 GameObject 继承自的组件 class 中。它们隐藏在 unityengine.coremodule.dll 中。不幸的是,UnityEngine 命名空间未包含在 Unity's git-adventure.
中
我知道这个问题已经得到解答,但最好记住,您不必再担心多次 GetComponent<>() 调用,因为 unity 会进行后台缓存,所以它不会'不会影响性能。
由于 Rider,我开始思考 transform 在 class 中的实际作用。 例如,当您调用 transform.position 时,它是 GetComponent 对象的转换还是预先引用它?我猜它不会因为 classes 的效率而不断地获取组件,但它实际上是如何知道这样的东西的。是否全部存储在 MonoBehaviour 中?
这是一个很好的问题,从直接提供的任何文档中看都不是很清楚。
根据 same question answered over here: this.transform 和 this.gameObject 都缓存在组件 class 中,这使得它们比通用的 GetComponent<>() 对应物更快。 这通常使我忽略了以下建议:当能够缓存变量、转换、标签和游戏对象属性时,永远不要使用 GetComponent()。
另外,Transform class 实现了 IEnumerable,基本上强制它充当固定大小的数组。 运行 this.transform 属性 上的 for-each 循环也会让您遍历存储在当前对象变换下的每个子变换。
如果您想自己深入了解一下,定义存储在 MonoBehaviour 和 GameObject 继承自的组件 class 中。它们隐藏在 unityengine.coremodule.dll 中。不幸的是,UnityEngine 命名空间未包含在 Unity's git-adventure.
中我知道这个问题已经得到解答,但最好记住,您不必再担心多次 GetComponent<>() 调用,因为 unity 会进行后台缓存,所以它不会'不会影响性能。