当同一个对象的2个实例发生碰撞时,如何仅销毁1个对象?

时间:2015-01-13 18:45:44

标签: unity3d

很抱歉,我在工作,但无法访问我的代码,但基本上。如果我把它设置为摧毁"其他"因为在更新结束之前没有任何东西被销毁,所以两个对象都被标记为销毁。我现在不关心哪一个幸存,只是想了解如何做到这一点的想法。在将来,我可能会创建一个新的实例,其中2击中但是两次都将触发创建新实例,并且2个新实例将发生碰撞等。

2 个答案:

答案 0 :(得分:2)

嗯,你可以制作一个标志,告诉你你是否被摧毁了。如果是这样,你就无法摧毁其他任何人。然后,无论哪个“碰撞”#39;方法首先被调用将是幸存者。它会是这样的:

private bool alreadyDead = false;
void OnCollisionEnter(Collision collision) {
    if (!alreadyDead) {
        MyScript script = collision.gameobject.GetComponent<MyScript>();
        if (script != null) {
             script.alreadyDead = true;
             collision.gameobject.Destroy();
        }
    }
}

答案 1 :(得分:1)

您需要设置某种标记以进行检查。你可以在脚本上设置一个布尔值,甚至可以切换你想要销毁的GameObject的活动状态,反过来也不会让禁用的GameObject通过它的碰撞/破坏方法。

void OnCollisionEnter (Collision collision) {
    // Only proceed if this gameObject is active
    if (gameObject.activeSelf) {
        // Disable the other gameObject we've collided with, then flag to destroy it
        collision.gameObject.SetActive(false);
        Destroy(collision.gameObject);
    }
}