Menu
CoddyTech

Máy quay quỹ đạo

Thuộc phần Vật lý và lối chơi trong hành trình Unity của Coddy. Bài học 48 trên 71.

Để xoay quanh một điểm, hãy giữ một góc, xoay một độ lệch cố định theo góc đó rồi cộng kết quả vào điểm. Phép nhân giữa phép quay và vectơ tạo ra chuyển động xoay: Quaternion.Euler(0, angle, 0) * offset xoay độ lệch quanh trục y, còn độ dài và độ cao vẫn giữ nguyên. Camera này xoay quanh một bức tượng với tốc độ 20 độ mỗi giây, luôn ở cao hơn 3 đơn vị và cách ra 6 đơn vị:

public Transform statue;
public float speed = 20f;
float angle;

void LateUpdate()
{
    angle += speed * Time.deltaTime;
    Vector3 offset = new Vector3(0, 3, -6);
    transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
    transform.LookAt(statue);
}

Khi góc bằng 0, độ lệch là (0, 3, -6), vì vậy camera ở phía sau bức tượng. Khi góc bằng 90, độ lệch là (-6, 3, 0), ở phía -x của bức tượng, còn khi góc bằng 180, độ lệch là (0, 3, 6), ở phía trước. Di chuyển camera không làm nó xoay, vì vậy LookAt hướng camera trở lại bức tượng từ mỗi vị trí mới.

Một góc thứ hai giúp nâng camera lên: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) xoay hướng phía sau lên trên theo góc pitch (một góc xoay dương quanh trục x sẽ nghiêng (0, 0, -1) lên trên), rồi xoay quanh theo góc yaw, nhờ đó camera luôn cách xa distance ở mọi góc.

Góc được lưu trong trường riêng của bạn, như trong Euler Angles: góc có thể tăng vượt quá 360 hoặc giảm xuống dưới 0 mà không bị giật, và bạn có thể giới hạn góc hoặc thay đổi góc bằng bàn phím. Thực hiện việc này trong LateUpdate() sẽ đặt camera sau khi bức tượng hoặc người chơi di chuyển trong khung hình.

challenge icon

Thử thách

Trung bình

Cho người chơi xoay camera quanh tòa tháp.

  1. Trong Update(), phím mũi tên phải và trái thay đổi yaw theo turnSpeed, còn phím mũi tên lên và xuống thay đổi pitch theo tiltSpeed, nhân với Time.deltaTime.
  2. Sau đó, giữ nguyên pitch = Mathf.Clamp(pitch, 10f, 60f);.
  3. Trong LateUpdate(), đặt transform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, sau đó gọi transform.LookAt(target);.

Nhấn Chơi và bay quanh tòa tháp. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

public class OrbitCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 8f;
    public float turnSpeed = 90f;
    public float tiltSpeed = 45f;
    public float yaw = 0f;
    public float pitch = 30f;

    void Update()
    {
        // Các phím mũi tên thay đổi yaw và pitch.
    }

    void LateUpdate()
    {
        // Đặt camera xoay quanh target và hướng về target.
    }
}

Tất cả bài học trong Vật lý và lối chơi

Tự luyện tập: Playground Unity