C# OnTiggerEnter和OnTiggerExit尽管进行了检查,但还是调用了两次

C# OnTiggerEnter和OnTiggerExit尽管进行了检查,但还是调用了两次,c#,unity3d,C#,Unity3d,我读了很多关于这个问题的问题,但我还不能解决它。我有一个带有球体碰撞器的球和一个不可见的墙,当球通过它时可以重新启动球(在onTriggerExit方法中)。问题是我无法解决它,即使使用布尔值来避免进入方法 public class ballRestart : MonoBehaviour { shootController instance; bool isColliding; // Use this for initialization void Start()

我读了很多关于这个问题的问题,但我还不能解决它。我有一个带有球体碰撞器的球和一个不可见的墙,当球通过它时可以重新启动球(在onTriggerExit方法中)。问题是我无法解决它,即使使用布尔值来避免进入方法

public class ballRestart : MonoBehaviour
{
    shootController instance;
    bool isColliding;
    // Use this for initialization
    void Start()
    {
        instance = Camera.main.GetComponent<shootController>();
        isColliding = false;
    }


    public void OnTriggerEnter(Collider col)
    {
        Debug.Log("TeEnter: " + isColliding);
        if (!isColliding)
        {
            isColliding = true;
            Debug.Log("TRIGGERED: " + isColliding);
        }

    }

    void OnTriggerExit(Collider hit)
    {
        Debug.Log("TeExit: " + isColliding);
        if (isColliding)
        {
            instance.initializeBall();
            isColliding = false;
            Debug.Log("exit");
        }
    }
}
公共类:单行为
{
shootController实例;
布尔合并;
//用于初始化
void Start()
{
instance=Camera.main.GetComponent();
isColliding=假;
}
公共对撞机(对撞机列)
{
Log(“TeEnter:+isColliding”);
如果(!正在合并)
{
isColliding=true;
Log(“触发:+isColliding”);
}
}
无效OnTriggerExit(碰撞器命中)
{
Log(“TeExit:+isColliding”);
如果(正在合并)
{
initializeBall();
isColliding=假;
Debug.Log(“退出”);
}
}
}
输出:


如您所见,每次球进入碰撞器时,它会进入两次,每次球退出同一碰撞器时,它会进入两次。我不知道这里发生了什么。

我很确定你的物体上有两个对撞机,每个对撞机都会触发事件。检查组件和子对象


注:我知道这是一个老问题,但我的回答对其他人会有帮助。

你能确认你没有多次意外地添加脚本吗?例如在子元素上。是的,脚本只添加到没有子元素的游戏对象。场景中有多少对象?使用
debug.Log(“触发:”+col.GameObject.name)进行调试这肯定不是unity的错误。检查调试,以及如何移动对象?如果您只是在不受保护的情况下跳过变换,则可能会发生这种情况。