Menu
CoddyTech

Xoay mỗi giây

Thuộc phần Những kiến thức cơ bản về lập trình trong Unity trong hành trình Unity của Coddy. Bài học 11 trên 85.

transform.Rotate(x, y, z) xoay một GameObject một số độ tương ứng quanh từng trục của nó. Khi được gọi trong Update(), hàm này xoay một chút sau mỗi khung hình, nên đối tượng cứ tiếp tục xoay.

Nhưng một giây có bao nhiêu khung hình? Trên máy tính nhanh, có thể là 120; trên điện thoại, có thể là 30. Lệnh transform.Rotate(0, 0, 5) thông thường sẽ khiến đối tượng xoay nhanh gấp bốn lần trên máy nhanh. Unity có giải pháp là Time.deltaTime: số giây đã trôi qua kể từ khung hình trước. Nhân tốc độ với giá trị này, tốc độ sẽ tính theo mỗi giây trên mọi thiết bị.

Ở đây, bánh xe xoay quanh trục z với tốc độ 45 độ mỗi giây:

public float speed = 45f;

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

Ở tốc độ 60 khung hình mỗi giây, Time.deltaTime xấp xỉ 0.0167, nên mỗi khung hình bánh xe xoay 45 * 0.0167, tức khoảng 0.75 độ. Sau 60 khung hình, tổng góc xoay là 45 độ. Ở tốc độ 30 khung hình mỗi giây, mỗi khung hình bánh xe xoay xa gấp đôi, nhưng tổng góc xoay sau một giây vẫn là 45 độ.

challenge icon

Thử thách

Dễ

Cho khối lập phương quay quanh trục y với tốc độ speed độ mỗi giây.

  1. Trong Update(), gọi transform.Rotate(x, y, z).
  2. Đặt speed * Time.deltaTime vào số ở giữa, dành cho y, và đặt 0 cho x và z. Bánh xe bên trên quay quanh trục z, còn khối lập phương này quay quanh trục y.

Nhấn Chơi: khối lập phương quay một phần tư vòng mỗi giây. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

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

    void Update()
    {
        // Xoay khối lập phương quanh trục y tại đây
    }
}

Tất cả bài học trong Những kiến thức cơ bản về lập trình trong Unity

Tự luyện tập: Playground Unity