C# 定时器不工作';在IF语句中将bool更改为false后不会停止

C# 定时器不工作';在IF语句中将bool更改为false后不会停止,c#,unity3d,C#,Unity3d,我有一个奇怪的问题。当我调用stopTimer()时,它会更改bool,但UpdateTime仍在工作,并且计时器正在运行。一切正常,但计时器不会停止 public float elapsedTime; public float startTime; public bool stopTimer = false; private bool keepTiming = true; void Start() { startTi

我有一个奇怪的问题。当我调用stopTimer()时,它会更改bool,但UpdateTime仍在工作,并且计时器正在运行。一切正常,但计时器不会停止

    public float elapsedTime;
    public float startTime;

    public bool stopTimer = false;

    private bool keepTiming = true;
    
    void Start()
    {
        startTime = Time.time;
    }

    void Update()
    {
        if(keepTiming)
        {
            UpdateTime();
            
        }else{Debug.Log("Timer has stopped");}

        if(stopTimer)
            Debug.Log(StopTimer());
    }

    public void UpdateTime()
    {
        elapsedTime = Time.time - startTime;
        float t = Time.time - startTime;

        string minutes = ((int) t/ 60).ToString();
        string seconds = (t % 60).ToString("f2");
        
        timeText.text = minutes + ":" + seconds;
        
    }

    float StopTimer()
    {
        keepTiming = false;
        return elapsedTime;
    }
}

它的工作原理是向Keepting bool添加静态。我真的不明白为什么,但它起作用了。

一般问题:你在某个时候操纵时间尺度吗?因为如果不是->你可以简单地使用instedi试试你的代码,它对我来说很好。您确定没有从其他源调用UpdateTime方法吗?您可以在visual studio上检查方法引用(右键单击并查找所有引用)@derHugo如果我更改时间刻度,我的方法是否会停止工作?@D.B VS code说只有一个引用,来自更新函数time Scaling是一个统一的东西,它不会修改秒表。这就是为什么德胡戈告诉你,如果你把时间刻度保持在1,就用秒表。你能检查对Keepting属性的引用吗?如果“static”修复了你遇到的问题,那么这个问题可能是由你的类有两个实例引起的。