在Unity中使用协程和循环实现可重复的延迟?

问题描述 投票:0回答:1

我对编码非常陌生,正在尝试制作一个基本的西蒙说游戏。目前,我有一个立方体,应该在几秒钟后更改材质,但是我真的很难让任何类型的计时器循环,以便立方体更改材质,暂停,再次更改材质。

这是我当前代码的一部分。目前,它经常崩溃,我相当确定这是由于我的 while 循环搞砸了。

   private void Awake()
   {
       while(i < 3)
       {
           StartCoroutine(Delay());
           i++;
       }
       
   }

   private IEnumerator Delay()
   {
       yield return new WaitForSeconds(3);
       ChangeColour();
   }

   void ChangeColour()
   {
       // we want to change simon's colour
       simon.GetComponent<Renderer>().material = callList[i];
       

   }
loops unity-game-engine coroutine
1个回答
0
投票

根据您的代码尝试,我假设您正在寻找类似的东西

[SerializeField] Renderer simon;
[SerializeField] Material[] callList;
[SerializeField] float delay = 3f;

private IEnumerator Start()
{
    var wait = new WaitForSeconds(delay);

    for(var i = 0; i < callList.Length; i++)
    {
        yield return wait;

        simon.material = callList[i];
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.