方法中的递增计时器不起作用 - 但不使用方法即可工作

Thr*_*dil 0 c# methods unity-game-engine

我遇到了一个让我感到困惑的问题,我无法解释。这里是:

public class Test : MonoBehaviour
{
    private float _myTimer = 0;

    // Update is called once per frame
    void Update()
    {
        StartTimer(_myTimer);

        //_myTimer += Time.deltaTime;
    }

    private void StartTimer(float timer)
    {
        timer += Time.deltaTime;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望计时器在这里增加......但它不会增加。但是,一旦我放弃 StartTimer() 方法并像注释中一样增加它,计时器就会增加。为什么是这样?

提前致谢!特林地尔

Tan*_*dar 5

您正在按值传递参数。当该方法对副本进行操作时,所做的任何更改都将被丢弃。

如果您将其更改为 ref 参数,您的代码将按预期工作。

public class Test : MonoBehaviour
{
    private float _myTimer = 0;

    // Update is called once per frame
    void Update()
    {
        StartTimer(ref _myTimer);

        //_myTimer += Time.deltaTime;
    }

    private void StartTimer(ref float timer)
    {
        timer += Time.deltaTime;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如下面的评论中所指出的,您不需要显式参数,因为它与方法所属的类型相同。

  • 鉴于 _myTimer 是私有成员,您甚至不需要它作为参数, StartTimer() 中的 this._myTimer += Time.deltaTime 就可以解决问题 (4认同)