Как переключать сопрограмму каждые 10 секунд, чтобы ускорить прокрутку фона? - PullRequest
0 голосов
/ 17 июня 2019

Я абсолютный новичок в 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 ]

2 голосов
/ 17 июня 2019

Во-первых, вы должны запускать сопрограмму только один раз, например, в Start - вместо этого вы запускаете ее каждый кадр, поэтому скорость застревает.

Во-вторых, ваша текстура масштабируется вообще? Это может повлиять на то, как оно выглядит, когда вы настраиваете смещение напрямую, и, следовательно, почему оно кажется застрявшим на 0,3, даже если ваш прирост равен 2f.

Наконец, обратите внимание, что deltaTime - это время с момента последнего кадра , поэтому использование для регулировки скорости вместо добавления константы приведет к странным результатам, зависящим от производительности. , Это полезно при применении скорости к движению, но не ускорения, основанного на этой игровой логике.

1 голос
/ 17 июня 2019

Он вызывает вашу функцию каждый кадр, потому что вы запускаете сопрограмму внутри Update.См. Обновление Справочник сценариев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...