gpt4 book ai didi

c# - Unity - 如何从父游戏对象检测子对象的碰撞?

转载 作者:行者123 更新时间:2023-11-30 19:15:16 24 4
gpt4 key购买 nike

我正在使用 Unity 5 制作 2D 游戏,但我遇到了子游戏对象对撞机的问题。我想检测子游戏对象与另一个对象之间的碰撞,从父脚本执行此操作并使用标签。

按照下面我的父脚本:

 void OnCollisionEnter2D(Collision2D hit) {

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

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

}

}

“敌人”标签是另一个与我的玩家 child 的碰撞器发生碰撞的对象。我想检测子对象与另一个对象之间的碰撞,我在许多关于 Unity 的类似论坛中进行了搜索,但无法解决我的问题。有人可以帮我解决这个问题吗?

最佳答案

发生碰撞时,Unity 将在层次结构中搜索最近的刚体,并在同一游戏对象上运行任何脚本。

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

  • 家长
    • child A
      • child B

parent 有:

  • 刚体 2D
  • 脚本

child B 有:

  • 盒子对撞机 2D

当盒子碰撞器与某物发生碰撞时,事件将直接通过子 A 冒泡并被父级上的刚体接收,然后将导致脚本运行。

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

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

  • 给 child 添加一个脚本来捕获碰撞并在那里处理它。如果需要,您可以像这样将事件转发给父脚本:

    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);

    }
    • 或者“另一个”对象上的脚本,以便从它的角度捕获该碰撞事件。

关于c# - Unity - 如何从父游戏对象检测子对象的碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41926890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com