c# - 在具有多个 T 类型组件的游戏对象上调用 GetComponent<T> 时,Unity 如何决定返回哪个组件?

标签 c# unity3d gameobject

如果我有一个 GameObject多个Component附加到它的相同类型的类(出于示例目的,我们称此类型为 HingeJoint),其中 HingeJoint如果我调用函数 GetComponent<HingeJoint>(),我会得到组件在我的 GameObject

根据我的研究,this answer声明 Unity 将简单地返回 Component 数组中的第一个匹配项s--但是,答案只是基于回答者自己的游戏引擎设计的有根据的猜测,该设计努力模仿 Unity,而不是 Unity 实际功能的权威来源。

最佳答案

Unity 中的每个对象及其子对象都分层放置在一个集合中。您可以将其称为“所见即所得”,因为如您所见,场景层次结构中的每个对象都按照它们在该列表中显示的相同顺序加载。同样的事情也适用于组件,这也是 Transform 组件被放置在所有其他组件之上的主要原因。

GetComponent 将返回从列表顶部看到的 Components 集合中的第一项。为准确确定哪个组件将被退回,您可以在检查器 View 中根据需要订购它们。


来自documentation page :

The order you give to components in the Inspector window is the order you need to use when querying components in your user scripts. If you query the components programmatically, you’ll get the order you see in the Inspector.

关于c# - 在具有多个 T 类型组件的游戏对象上调用 GetComponent<T> 时,Unity 如何决定返回哪个组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48538396/

相关文章:

C# - 如何以某种方式使用枚举标志

c# - C# (.NET) 中的图形

c# - 有没有办法通过替换部分或全部类型参数来覆盖虚拟泛型方法?

c# - Unity 3D 如何将 Vector3 投影到平面上或获取特定平面中两个 Vector3 之间的角度?

Unity 中的 C# 脚本打开 VS15 的新实例而不是添加到现有实例

c# - Unity/C# 查找对象并获取组件

c# - 使游戏对象在有限的时间内出现和消失

c# - 如何将录制的音频序列化为XML并反序列化以在C#/xaml Metro应用中播放?

C# 2D 平台运动代码

c# - 如何销毁实例化的游戏对象克隆?