Почему время вращения составляет 0,5 секунды? - PullRequest
0 голосов
/ 27 марта 2020
private void RotateTargetsRandom()
    {
        timer += Time.deltaTime;

        if (timer > rotationTime)
        { // timer resets at 2, allowing .5 s to do the rotating
            qTo = Quaternion.Euler(new Vector3(0.0f, Random.Range(-180.0f, 180.0f), 0.0f));
            timer = 0.0f;
        }

        foreach (var target in targets)
        {
            target.transform.rotation = Quaternion.Slerp(target.transform.rotation, qTo, Time.deltaTime * speed);
        }
    }

Функция заставляет каждые 2 секунды вращаться цели (GameObjects). Но в комментарии, а не в моем комментарии, он говорит: «таймер сбрасывается на 2, позволяя вращаться на 0,5 с»

Где в коде часть 0,5?

Так что каждые 2 секунды это вращение, и вращение занимает 0,5 секунды. Я просто не понимаю, где 0,5 часть? И если я хочу, чтобы это вращалось, продолжительность 0,1 раза вместо 0,5?

1 Ответ

0 голосов
/ 28 марта 2020

Что заставляет его вращаться после скорости, это

target.transform.rotation = Quaternion.Slerp(target.transform.rotation, qTo, Time.deltaTime * speed);

Slerp - это сферическая интерполяция, которая в основном интерполирует текущее вращение объекта и значение qTo , используя deltaTime (время, прошедшее с последнего кадра в секундах) и произвольная скорость .

например, представьте, что для упрощения вы вращаетесь только по одной оси, скажем, по оси z , если вращение равно 0, а qTo равно 45 на первой итерации, то оно будет:

45 * deltaTime * speed

Но так как оно уже установлено для вращения преобразования, следующая итерация будет использовать новое вращение в качестве начального значения интерполяция:

(45 - previousRotation) * deltaTime * speed + previousRotation

Таким образом, она сходится к 45, когда speed * sum(all deltaTimes) равен единице.

Так что я предполагаю, что ваша скорость равна 2, поскольку для достижения целевого вращения требуется 0,5 с.

Но код немного ненадежный, поскольку он будет вести себя странно, если значение параметра «Вращение» меньше 1 / скорость.

Это не указано в вопросе, но я полагаю, что вы вызываете его внутри обновления (i sh), чтобы позволить deltaTime иметь разумное значение.

Таким образом, чтобы контролировать продолжительность вашего вращения, вы устанавливаете скорость на желаемое значение, чтобы длительность 0,1 с установила скорость на 10.

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