繁体   English   中英

Unity - 如何从父GameObject检测子对象的冲突?

[英]Unity - How to detect collision on a child object from the parent GameObject?

我正在使用Unity 5进行2D游戏,我遇到了儿童GameObject对撞机的问题。 我想检测Child GameObject与另一个对象之间的冲突,从父脚本执行此操作并使用标记。

按照下面的父脚本:

 void OnCollisionEnter2D(Collision2D hit) {

    if(hit.transform.tag == "Enemy"){

        this.playerRigidbody.AddForce(new Vector2(0, this.forceJump));

    }

 }

“Enemy”标签是另一个与我的玩家孩子的碰撞器碰撞的物体。 我想检测子对象和另一个对象之间的冲突,我在很多类似的论坛中搜索过关于Unity但我无法解决我的问题。 有人可以帮我解决这个问题吗?

发生冲突时,Unity将在层次结构中搜索最近的Rigidbody并在同一GameObject上运行任何脚本。

因此,简单的方法是使用脚本确保刚体在父对象上。 这是一个示例层次结构:

    • 孩子A.
      • 孩子B.

家长有:

  • 一个刚体2D
  • 剧本

B儿童有:

  • Box Collider 2D

当盒式对撞机与某些东西发生碰撞时,该事件将直接通过Child A冒泡并被父级的Rigidbody接收,这将导致脚本运行。

如果你不能把刚体放在父母身上..

出于性能原因,Unity不会将事件在层次结构中冒泡。 所以,你的其他选择是......

  • 向捕获碰撞的子项添加一个脚本并在那里处理它。 如果需要,您可以将事件转发到父脚本,如下所示:

     void OnCollisionEnter2D(Collision2D hit) { // Forward to the parent (or just deal with it here). // Let's say it has a script called "PlayerCollisionHelper" on it: PlayerCollisionHelper parentScript = transform.parent.GetComponent<PlayerCollisionHelper>(); // Let it know a collision happened: parentScript.CollisionFromChild(hit); } 
    • 或者是“另一个”对象上的脚本,以便从它的角度捕获该碰撞事件。

确保子对象没有刚体并确保对撞器属性正确。 看看这个在复合撞机部分文章对儿童的对象结合对撞机的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM