Menu
CoddyTech

Поворачивай каждую секунду

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 11 из 85.

transform.Rotate(x, y, z) поворачивает GameObject на указанное количество градусов вокруг каждой из его осей. При вызове в Update() он поворачивает объект понемногу с каждым кадром, поэтому объект продолжает вращаться.

Но сколько кадров в секунде? На быстром компьютере их может быть 120, а на телефоне — 30. Обычный вызов transform.Rotate(0, 0, 5) заставил бы объект вращаться на быстром устройстве в четыре раза быстрее. Решение Unity — Time.deltaTime: количество секунд, прошедших с последнего кадра. Умножь на него скорость, и она будет означать скорость в секунду на любом устройстве.

Здесь колесо вращается вокруг оси z на 45 градусов в секунду:

public float speed = 45f;

void Update()
{
    transform.Rotate(0, 0, speed * Time.deltaTime);
}

При 60 кадрах в секунду Time.deltaTime равен примерно 0.0167, поэтому за каждый кадр объект поворачивается на 45 * 0.0167, то есть примерно на 0.75 градуса, а 60 таких поворотов дают 45 градусов. При 30 кадрах в секунду за каждый кадр объект поворачивается вдвое дальше, и за секунду всё равно набирается 45 градусов.

challenge icon

Задание

Легко

Заставь куб вращаться вокруг оси y со скоростью speed градусов в секунду.

  1. В Update() вызови transform.Rotate(x, y, z).
  2. Укажи speed * Time.deltaTime для среднего числа, то есть для y, а для x и z — 0. Колесо выше вращалось вокруг z; этот куб вращается вокруг y.

Нажми «Играть»: куб делает четверть оборота каждую секунду. Затем нажми «Проверить».

Попробуйте сами

using UnityEngine;

public class Spinner : MonoBehaviour
{
    public float speed = 90f;

    void Update()
    {
        // Здесь поверните куб вокруг его оси y
    }
}

Все уроки раздела Основы скриптинга в Unity

Потренируйтесь самостоятельно: Песочница Unity