我最近遇到的问题如下:
我有一个Player对象,附加了一个名为“Player”的脚本。
我的游戏对象层次结构类似于这样:
我想在Player.cs中处理所有与玩家有关的碰撞事件,这样它们就可以集中在一个地方。问题是,很难区分是
如果您已经像我一样设置了层次结构,则Body和Feet触发器都将在它们的父脚本中调用OnTriggerEnter2D,从而调用
在
由于
我有一个Player对象,附加了一个名为“Player”的脚本。
我的游戏对象层次结构类似于这样:
Player (parent) // Has Player.cs and a RigidBody attached to it.
- GFX // Holds graphics like sprites
- PhysicsHolder // Empty object
- Body // Has a box trigger 2d defining the player body
- Feet // Has a box trigger 2d defining the player feet area
我想在Player.cs中处理所有与玩家有关的碰撞事件,这样它们就可以集中在一个地方。问题是,很难区分是
Feet
对象还是Body
对象触发了OnTriggerEnter2D
的调用。如果您已经像我一样设置了层次结构,则Body和Feet触发器都将在它们的父脚本中调用OnTriggerEnter2D,从而调用
Player.OnTriggerEnter2D
。在
OnCollisionEnter
中,您可以使用collision.other
获取触发调用的碰撞体的引用。然后,您可以轻松地为每个相应的碰撞体设置一个标签,并执行collision.other.CompareTag()
。由于
OnTriggerEnter
没有Collision
对象作为参数,而是一个Collider2D
,并且Collider2D
没有对other
或类似物的引用,因此在想要处理触发事件的情况下,您无法做到相同。 在Player.cs
中使用this.CompareTag()
也不够,因为您将比较父级Player对象的标记,而不是Feet或Body对象的标记。
我后来找到了解决这个问题的方法,在此提供给大家。也许对遇到这个问题的任何人都有用。