代码之家  ›  专栏  ›  技术社区  ›  nmw01223

统一-混淆组件的类型和实例

  •  0
  • nmw01223  · 技术社区  · 5 年前

    具体的问题是:我想要( 在运行时,而不是通过编辑器 )能够创建能够检测碰撞的组件,并将检测信息传递给其他组件。组件是非常简单的-(看不见的)各种大小的立方体与 Colliders isTrigger 在每种情况下设置。然后是碰撞检测( OnTriggerEntry() , OnTriggerExit() )将碰撞信息传递给其他组件,例如“嗨,X刚刚与数字6发生了碰撞”。

    起初,我希望能够将这些调用挂接在假设它们是事件的基础上,但似乎它们不是事件( MonoBehaviour

    因为会有很多这样的组件,都附加了相同的脚本(类),所以我需要设置一些内部类变量来告诉它在发生冲突时要做什么/联系谁。这就是混乱开始的地方。

    我附加的脚本中的类将有一个名称(' MyCollisionHandler ,但这不是类的实例,它只是类定义或类型,如果您愿意的话,例如 class MyCollisionHandler { ...

    FindObjectOfType<MyCollisionHandler>() ,这不会有任何帮助,因为可能会有很多,它只会返回第一个找到的。好的,我可以用 FindObjectsOfType<MyCollisionHandler>() 取而代之的是得到一个数组-但是哪个是哪个?

    所以,这又回到了我对统一结构(组件名、标记等之间的区别)以及它们与类定义和实例的关系缺乏理解的问题上。概括地说,如何获得附加到游戏对象的类对象的单个实例?

    0 回复  |  直到 5 年前
        1
  •  2
  •   Pluto    5 年前

    我附加的脚本中的类将有一个名称 ('MyCollisionHandler',例如),但它不是 班

    是,实例由 GameObject.AddComponent .

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

    稍后您可以使用 GameObject.GetComponent ,就像其他组件一样。

    FindObjectOfType FindObjectsOfType 如果您没有对脚本/组件所附加到的游戏对象的引用,或者您不关心该脚本/组件所附加到的游戏对象,您只需要其中一个/全部。