Unity-对组件的类型和实例的困惑

问题描述 投票:0回答:1

我在这里有一个具体的问题,但在背后是我对数据类型以及什么是Unity组件名称,标记和类型的困惑。

具体问题是这样的:我希望(在运行时,而不是通过编辑器)能够创建可以检测碰撞的组件并将检测信息传递给其他组件。组件非常简单-各种大小的(不可见的)多维数据集都附加了Colliders,并且在每种情况下都设置了isTrigger。然后在进行碰撞检测(OnTriggerEntry()OnTriggerExit())时将碰撞信息传递给其他组件,例如“嗨,X刚与数字6发生碰撞”。

最初,我希望能够以那些调用为事件的方式挂接这些调用-但似乎它们不是事件(我认为MonoBehaviour覆盖)。在其他地方阅读,看来做到这一点的唯一方法是在创建组件之后动态附加脚本(换句话说,就是C#类)。

由于将有许多这样的组件,并且都附加了相同的脚本(类),因此我需要设置一些内部类变量来告诉它做什么/在碰撞时与谁联系。这就是混乱的开始。

在我看来,Unity设计者/文档编制者为了避免使人负担过多的代码,往往会掩盖此类细节,或者至少尝试以一种非软件的方式进行解释。对于像我这样在软件方面思考的人来说,这是可以理解的,但却非常令人困惑。

我附加的脚本中的类将有一个名称(例如'MyCollisionHandler'),但这不是类的实例,它只是类定义-或类型,如果愿意,例如“ class MyCollisionHandler { ...”。但是,必须是这样的情况(除非它仅包含静态变量和函数)一旦附加到组件,就必须有它的实例。

因此,简单地说-我如何获得对附加到该特定碰撞检测对象的通用类类型的特定实例的引用?有了这些信息后,便可以使用方法按自己喜欢的方式进行设置。如果使用FindObjectOfType<MyCollisionHandler>(),那将无济于事,因为它们可能有很多负载,并且只会返回找到的第一个。好,我可以改用FindObjectsOfType<MyCollisionHandler>()并获取它们的数组-哪个是?

所以,这又回到了我对Unity结构的普遍了解-组件名称,标签等之间的区别以及它们与类定义和实例之间的关系。概括地说-如何获得附加到游戏对象的类对象的各个实例?

c# unity3d reference gameobject
1个回答
0
投票

我附加的脚本中的类将具有一个名称 (例如,“ MyCollisionHandler”),但这不是 课

是,实例由GameObject.AddComponent返回。

MyCollisionHandler handler = gameObject.AddComponent<MyCollisionHandler>();
handler.someValue = 42;

稍后,您可以使用GameObject.GetComponent获取实例,就像对其他任何组件一样。如果您没有引用脚本/组件所附加到的游戏对象的引用,或者您不在乎该脚本/组件所附于哪个游戏对象,而只想要一个/全部,则可以使用FindObjectOfTypeFindObjectsOfType其中。

© www.soinside.com 2019 - 2024. All rights reserved.