首页 > 解决方案 > 在方法中增加计时器不起作用 - 但在不使用方法的情况下工作

问题描述

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

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;
    }
}

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

提前致谢!特林地尔

标签: c#unity3dmethods

解决方案


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

如果将其更改为 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;
    }
}

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


推荐阅读