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

Unity3d 当同一对象的两个实例发生碰撞时,如何仅销毁一个对象?,unity3d,Unity3d,对不起,我在工作,没有访问我的代码,但基本上。如果我将其设置为销毁“other”,因为在更新结束之前不会销毁任何对象,所以这两个对象都会被标记为销毁。我不在乎哪一个现在还活着,只是想了解如何做到这一点。将来,我可能会创建一个新实例,其中2个命中,但同样,这两个命中都会触发一个新实例的创建,并且这2个新实例会发生碰撞等等。好吧,您可以制作一个标志,告诉您是否已被销毁。如果是这样的话,你就不能摧毁任何人。然后,无论哪个“碰撞”方法首先被调用,都将是幸存者。应该是这样的: private bool a

对不起,我在工作,没有访问我的代码,但基本上。如果我将其设置为销毁“other”,因为在更新结束之前不会销毁任何对象,所以这两个对象都会被标记为销毁。我不在乎哪一个现在还活着,只是想了解如何做到这一点。将来,我可能会创建一个新实例,其中2个命中,但同样,这两个命中都会触发一个新实例的创建,并且这2个新实例会发生碰撞等等。

好吧,您可以制作一个标志,告诉您是否已被销毁。如果是这样的话,你就不能摧毁任何人。然后,无论哪个“碰撞”方法首先被调用,都将是幸存者。应该是这样的:

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();
        }
    }
}
private bool-alreadyDead=false;
无效碰撞中心(碰撞){
如果(!alreadyDead){
MyScript script=collision.gameobject.GetComponent();
如果(脚本!=null){
script.alreadyDead=true;
collision.gameobject.Destroy();
}
}
}

您需要设置某种类型的标志以进行检查。你可以在脚本上设置一个布尔值,或者甚至可以切换你想要销毁的游戏对象的活动状态,而不是让被禁用的游戏对象通过其碰撞/销毁方法

void OnCollisionEnter(碰撞){
//仅当此游戏对象处于活动状态时才能继续
if(gameObject.activeSelf){
//禁用我们碰撞过的另一个游戏对象,然后标记销毁它
collision.gameObject.SetActive(false);
破坏(碰撞,游戏对象);
}
}

如果这样做有效,我认为这比设置标志更有意义,因为这样甚至不会调用其他冲突。我是unity的新手,我知道它直到循环结束时才发出销毁命令,但我不确定setactive或其他属性。我尝试了这个,它确实有效(或者至少现在有效)。基本上,我在unity上得到的答案也不错。我真的希望克里斯所展示的东西能起作用,看起来更干净,哈哈