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

C# Unity如何决定在对具有多个T类型组件的游戏对象调用GetComponent时返回哪个组件?,c#,unity3d,gameobject,C#,Unity3d,Gameobject,如果我有一个游戏对象,它有多个相同类型的组件类,让我们调用这个类型的HingeJoint作为例子,如果我在我的游戏对象上调用函数GetComponent,我会得到哪个HingeJoint组件 根据我的研究,Claimes Unity将只返回组件数组中的第一个匹配项,答案只是一个基于回答者自己的游戏引擎设计的有根据的猜测,该引擎努力模仿Unity,而不是Unity实际功能的权威来源。Unity中的每个对象及其子对象都按层次排列在一个集合中。您可以将其称为WYSIWYG,因为正如您所看到的,场景层次

如果我有一个游戏对象,它有多个相同类型的组件类,让我们调用这个类型的HingeJoint作为例子,如果我在我的游戏对象上调用函数GetComponent,我会得到哪个HingeJoint组件


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

Unity中的每个对象及其子对象都按层次排列在一个集合中。您可以将其称为WYSIWYG,因为正如您所看到的,场景层次中的每个对象都是按照它们在该列表中显示的相同顺序加载的。同样的道理也适用于组件,这也是为什么将变换组件放在每个其他组件之上的主要原因

GetComponent将从列表顶部看到的组件集合中返回第一项。为了确切地确定将返回哪个组件,您可以在inspector视图中根据需要订购它们

从:

在Inspector窗口中为组件指定的顺序是在用户脚本中查询组件时需要使用的顺序。如果以编程方式查询组件,您将获得在Inspector中看到的顺序


Unity中的每个对象及其子对象都按层次结构放置在集合中。您可以将其称为WYSIWYG,因为正如您所看到的,场景层次中的每个对象都是按照它们在该列表中显示的相同顺序加载的。同样的道理也适用于组件,这也是为什么将变换组件放在每个其他组件之上的主要原因

GetComponent将从列表顶部看到的组件集合中返回第一项。为了确切地确定将返回哪个组件,您可以在inspector视图中根据需要订购它们

从:

在Inspector窗口中为组件指定的顺序是在用户脚本中查询组件时需要使用的顺序。如果以编程方式查询组件,您将获得在Inspector中看到的顺序

经m.rogalski修正后编辑

手册指出,组件是按照您在inspector中放入它们的顺序进行检查的,因此GetComponent将为您提供T类型的第一个组件

我建议不要使用inspector命令,而是使用

GetComponents<T>()
要检索它们并动态选择所需的一个,请查看(如果需要)

这是因为如果组件的顺序很重要,那么维护项目将非常困难。在项目中工作的任何其他人都需要知道这些组件必须放置的约定。即使您单独工作,在添加或删除组件时也需要非常小心,如果出现错误,您的IDE将无法给出在m.rogalski更正后编辑的明确错误

手册指出,组件是按照您在inspector中放入它们的顺序进行检查的,因此GetComponent将为您提供T类型的第一个组件

我建议不要使用inspector命令,而是使用

GetComponents<T>()
要检索它们并动态选择所需的一个,请查看(如果需要)


这是因为如果组件的顺序很重要,那么维护项目将非常困难。在项目中工作的任何其他人都需要知道这些组件必须放置的约定。即使您单独工作,在添加或删除组件时也需要非常小心,如果出现错误,您的IDE将无法为您提供明确的错误

可能没有记录,因为如果您有特定的需求,您可以获取组件并选择所需的组件。让GetComponent自由返回他们在未来版本中没有合同义务保证的任意组件。可能没有文档记录,因为如果您有特定需求,您可以获取组件并选择您想要的组件。让GetComponent自由返回他们在未来版本中没有合同义务保证的任意组件。对于返回哪个组件有保证,请先阅读文档。不必屈尊,GetComponent的文档没有提到这一点。但你是对的,我将编辑关于订单的答案。我坚持认为,使用这种约定是不好的做法,尽管这甚至不是不好的做法,循环遍历所需类型的组件更方便,然后您可以找到您需要的组件,而不是依赖集合的顺序。我想这就是我所说的。循环通过所需的组件是很好的。但我认为,我所期望的逻辑应该是
n代码有一项保证,保证返回哪个组件,请先阅读文档。好的,不必居高临下,GetComponent的文档没有提到这一点。但你是对的,我将编辑关于订单的答案。我坚持认为,使用这种约定是不好的做法,尽管这甚至不是不好的做法,循环遍历所需类型的组件更方便,然后您可以找到您需要的组件,而不是依赖集合的顺序。我想这就是我所说的。循环通过所需的组件是很好的。但我认为我们所需要的逻辑应该是代码谢谢,这正是我所寻找的答案。简洁明了,你是最棒的!!谢谢,这正是我想要的答案。简洁明了,你是最棒的!!