如果不在 c# unity 中使用 OnCollisionExit,我怎么知道一个对象没有与另一个对象发生碰撞?

How do I know that an object is not colliding with another object without using OnCollisionExit in c# unity?

我尝试使用 OnCollisionExit,但它没有检测到其他对象的框 collider 2D 被禁用(当我禁用其他对象框对撞机 2D 时,它没有检测到它正在停止相撞)。我需要禁用其他对象 collider 因为我将它用作打孔的范围指示器并且我不希望它与其他对象交互(例如:玩家用他的范围指示器推开敌人).我可以使用其他方法吗?

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.collider.tag == "PunchRange")
    {
        Player.GetComponent<Fight>().PunchInRange = true;
    }

    if (collision.collider.tag == "KickRange")
    {
        Player.GetComponent<Fight>().KickInRange = true;
    }
}
private void OnCollisionExit2D(Collision2D collision)
{
    if (collision.collider.tag == "PunchRange")
    {
        Player.GetComponent<Fight>().PunchInRange = false;
    }
    if (collision.collider.tag == "KickRange")
    {
        Player.GetComponent<Fight>().KickInRange = false;
    }
}

我希望它在未与对象发生碰撞时进行检测,即使对象的框 collider 2D 已禁用。

你必须重组你的介绍,因为它太复杂了,你到底想要什么。

要检测碰撞或缺少碰撞,您必须使用碰撞器(也许放置额外的碰撞器但作为触发器)。但是我的理解是您想将它们用作触发器。在 Collider2D 组件上,您可以设置值 isTrigger。设置它会使对撞机仍然工作但不是物理上的(其他对撞机可以通过它)。将其设置在对撞机上并使用: https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnTriggerExit2D.html

这应该适合你。