如何每10秒循环一次协程以加速滚动背景?

时间:2019-06-17 14:17:44

标签: c# unity3d

我绝对是Unity的新手,我正在尝试创建一个2D游戏,该游戏要求滚动背景每10秒加速一次。我无法使代码正常工作

我尝试设置一个协程,但是似乎每隔一帧而不是每隔10秒调用一次函数

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScrollingBackground : MonoBehaviour
{
    public float bgSpeed = 5;
    public Renderer bgRend;
    public float increment = 2f;

    private void Start()
    {
         StartCoroutine(Accelerate());
    }

    void Update()
    {
        bgRend.material.mainTextureOffset += new Vector2(0f, bgSpeed * Time.deltaTime);
        StartCoroutine(Accelerate());
    }

     private IEnumerator Accelerate()
    {
        while (true)
        {
            bgSpeed = increment * Time.deltaTime;
            yield return new WaitForSeconds(10f);
            Debug.Log("Getting Faster!");
            Debug.Log("OnCoroutine: " + (int)Time.time);
        }
    }
}

不仅背景速度非常缓慢(只能达到0.3左右并卡住),而且我似乎也无法完成这项工作。谢谢您的帮助!

2 个答案:

答案 0 :(得分:2)

首先,您应该只启动一次协程,例如在Start中-相反,您要在每一帧都启动它,所以速度会停滞。

第二,您的纹理scaled完全是?当您直接调整偏移量时,这可能会影响它的外观,因此,即使此处的增量为2f,也为何它似乎停留在0.3。

最后,请注意,deltaTime是最后一个之后的时间,因此使用调整速度而不是添加常量会产生取决于性能的奇怪结果。在将速度应用于运动而非基于该游戏逻辑的加速度时很有用。

答案 1 :(得分:1)

它在每一帧都调用函数,因为您在Update内部启动了协程。请参阅Update脚本参考。