我正在使用Unity 5进行2D游戏,我遇到了儿童GameObject对撞机的问题。我想检测Child GameObject与另一个对象之间的冲突,从父脚本执行此操作并使用标记。
按照下面的父母脚本:
void OnCollisionEnter2D(Collision2D hit) {
if(hit.transform.tag == "Enemy"){
this.playerRigidbody.AddForce(new Vector2(0, this.forceJump));
}
}
" Enemy" tag是另一个与我的玩家孩子的碰撞器碰撞的对象。我想检测子对象和另一个对象之间的冲突,我在很多类似的论坛中搜索过关于Unity但我无法解决我的问题。有人可以帮我解决这个问题吗?
答案 0 :(得分:7)
当发生冲突时,Unity将在层次结构中搜索 nearest Rigidbody ,并在同一个GameObject上运行任何脚本。
因此,简单的方法是使用脚本确保刚体位于父对象上。这是一个示例层次结构:
家长:
孩子B有:
当盒子碰撞器碰撞某物时,事件将直接冒出来通过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);
}
答案 1 :(得分:0)
确保子对象没有刚体并确保对撞器属性正确。查看此article中的“复合碰撞器”部分,了解有关在子对象中合并碰撞器的更多信息。