是什么决定了从一个事件(如Unity3d中两个对象之间的碰撞)触发两个事件处理程序的时间?

是什么决定了从一个事件(如Unity3d中两个对象之间的碰撞)触发两个事件处理程序的时间?,unity3d,Unity3d,我有两个对象(A和B)发生碰撞,当它们发生碰撞时,它们各自触发TriggerEnter2D事件 发生这种情况时,对象A会受到伤害 物体B自我毁灭 我注意到,在这个模型中,物体A受到的损伤是间歇性的。有时它会受到伤害,有时则不会。这是由于(表面上)对象B在对象A计算其伤害之前摧毁了自身。至少,当我注释掉销毁方法时,所有的伤害都得到了正确的计算。这是一个时间问题,是一种让我有点害怕的错误,因为它很微妙 因为我是Unity的新手,有没有处理两个交互对象的架构的最佳实践?这一定是很常见的情况。我看到

我有两个对象(A和B)发生碰撞,当它们发生碰撞时,它们各自触发TriggerEnter2D事件

  • 发生这种情况时,对象A会受到伤害
  • 物体B自我毁灭
我注意到,在这个模型中,物体A受到的损伤是间歇性的。有时它会受到伤害,有时则不会。这是由于(表面上)对象B在对象A计算其伤害之前摧毁了自身。至少,当我注释掉销毁方法时,所有的伤害都得到了正确的计算。这是一个时间问题,是一种让我有点害怕的错误,因为它很微妙

因为我是Unity的新手,有没有处理两个交互对象的架构的最佳实践?这一定是很常见的情况。我看到的教程似乎使用了处理对象(对象B)中其他对象(比如对象A)的公开属性


因此,我在对象B上只有一个处理程序,该处理程序将调用对象a上的公共方法来表示“您已损坏”。这是最佳实践吗?

假设对象A是玩家,对象B是某种子弹,最好定义一个公共函数,使对象A受到依赖于对象B的伤害,而不是单独调用碰撞处理程序

public class ObjectB : MonoBehaviour {
    public int dmg = 10;

    void OnTriggerEnter2D(Collider2D other){
        if(other.gameObject.tag == "Player"){
            other.gameObject.GetComponent<SCRIPT>().TakeDamage(dmg);
            destroy(gameobject);
        }
    }
}
公共类ObjectB:monobhavior{
公共整数dmg=10;
无效OnTiggerEnter2D(碰撞的R2D其他){
如果(other.gameObject.tag==“玩家”){
other.gameObject.GetComponent().TakeDamage(dmg);
摧毁(游戏对象);
}
}
}

在我的游戏开发之旅中,我说“最佳实践”还为时过早,但对于遵循各种来源的最初几个项目,这就是冲突的处理方式:通过调用主对象上的公共效应器函数来处理次对象上的冲突。

gregory您可以将destroy函数与第二个参数一起使用,该参数是删除对象的时间延迟,例如:destroy(GameObject,TimeToDelete(in float))


这样,两个触发器事件都应该起作用。否则,Varaquilex所说的是一种更好的方法,您应该将其标记为已回答。

是的,这与我所看到的教程一致。我会看看是否有其他人有不同的意见,但看起来就是这样。谢谢。我想用一个过程来保证行为是最佳实践。谢谢你。