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.
Thử thách
Trung bìnhCho người chơi xoay camera quanh tòa tháp.
- Trong
Update(), phím mũi tên phải và trái thay đổiyawtheoturnSpeed, còn phím mũi tên lên và xuống thay đổipitchtheotiltSpeed, nhân vớiTime.deltaTime. - Sau đó, giữ nguyên
pitch = Mathf.Clamp(pitch, 10f, 60f);. - Trong
LateUpdate(), đặttransform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);, sau đó gọitransform.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
1Rigidbody
Trọng lực và khối lượngĐẩy bằng AddForceNhảy bằng xung lựcFixedUpdate cho vật lýVận tốcVật thể động họcÔn tập: Bệ phóng4Coroutine
InvokeInvokeRepeating, CancelInvokeCoroutine đầu tiên của bạnVòng lặp trong CoroutineDừng CoroutineÔn tập: đếm ngược10Dự án: Thoát khỏi đấu trường
Đấu trườngThợ săn2Va chạm
OnCollisionEnterMình đã va chạm với gì?Vỡ khi va chạmĐứng trên mặt đấtĐộ nảy và ma sátHình dạng colliderÔn tập: Tường có thể phá vỡ5Dự án: Cuộc đua thu thập xu
Quả bóng lănThu thập xuTự luyện tập: Playground Unity