Выполнение цикла внутри Update () - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужно изменить масштаб объекта на основе значения из массива (data_int []), оно должно увеличиваться, если значение увеличивается, и наоборот.код, который я пробовал, делает это, но я могу только визуализировать конечный результат.Тем не менее, мне нужно визуализировать каждый шаг в цикле.

void Update()
{
    if (MyFunctionCalled == false)
    {

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

        }
        MyFunctionCalled = true;
   }
  }     
 }
}

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

Вы можете использовать функцию Coroutine для достижения своей цели.

Линия, yield return new WaitForSeconds(.5f) будет имитировать ожидание в течение 0,5 секунд перед продолжением. yield return null, yield return new WaitForEndOfFrame() и другие также могут использоваться для задержки выполнения Coroutine. Более подробную информацию о том, когда каждый из этих возвратов можно найти здесь . Этот вопрос о сопрограммах также может быть полезен.

    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 голос
/ 30 апреля 2019

Весь цикл выполняется за 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...