在Update()中运行循环

时间:2019-04-30 10:46:21

标签: c# visual-studio unity3d

我需要根据数组(data_int [])中的值更改对象的比例,如果值增加,则应该增加,反之亦然。我尝试的代码可以做到这一点,但我只能看到最终结果。但是,我需要可视化循环中的每个步骤。

handleCheckbox = id => {
  this.setState(state => {
    items: state.items.map(item => ({
      ...item,
      checked: item.Id === id ? !item.checked : item.checked
    }))
  });
};

2 个答案:

答案 0 :(得分:2)

您可以使用Coroutine函数来实现您的目标。

yield return new WaitForSeconds(.5f)行将模拟等​​待0.5秒后才能继续。 yield return nullyield return new WaitForEndOfFrame()等也可以用来延迟Coroutine的执行。可以在here中找到有关何时返回的更多信息。 This question on coroutines也可能有用。

    void Start()
    {
        StartCoroutine(ScaleObject());
    }

    IEnumerator ScaleObject()
    {
        for (int i = 1; i < 25; i++)
        {
            if (data_int[i] > data_int[i - 1])
            {
                transform.localScale += new Vector3(0.01f, 0.01f, 0.01f);
            }
            else if (data_int[i] < data_int[i - 1])
            {
                transform.localScale += new Vector3(-0.01f, -0.01f, -0.01f);
            }
            yield return new WaitForSeconds(.5f);
        }
    }

答案 1 :(得分:1)

整个循环在1帧内执行,您无法逐步查看。您可以在方法Update

之外“模拟”

例如:

// initialize your iterator
private int i = 1;

// I removed the checks on MyFunctionCalled because this may be irrelevant for your question
void Update()
{
    // use an if instead of a for
    if (i < 25)
    {
        if (data_int[i] > data_int[i - 1])
        {
            transform.localScale += new Vector3(0.01f, 0.01f, 0.01f);
        }
        else if (data_int[i] < data_int[i - 1])
        {
            transform.localScale += new Vector3(-0.01f, -0.01f, -0.01f);
        }
        // this is the end of the supposed loop. Increment i
        ++i;
    }
    // "reset" your iterator
    else
    {
        i = 1;
    }
}