Trái banh lăn 3/8 – Di chuyển camera theo đối tượng

Chúng ta đã thiết lập một trái banh trên mặt nền và đã gán lệnh để có thể điều khiển banh lăn theo ý muốn bằng cách nhấn các phím mũi tên.

Phần này chúng ta sẽ di chuyển camera theo sự chuyển động của đối tượng. Và như thế đối tượng luôn nằm giữa màn hình, chỉ có hậu cảnh di chuyển mà thôi.

Camera mặc định là Main Camera. Khi click chọn trong Hierachy, trên cửa sổ Scene xuất hiện một màn hình camera thu nhỏ.

Bước 1: Di chuyển camera lên cao và chút xuống hướng vào quả banh

Lưu ý là camera không cần có thuộc tính vật lý, vì thế không cần dùng RigidBody component như quả banh

Click chọn camera, bên phải bảng lệnh Inspector

  • Nâng camera lên 10 đơn vị → Position Y: 10
  • Xoay camera 45 oC → Rotation X: 45

Bước 2: Gán lệnh cho camera chạy theo Player

Vẫn đang click chọn Main camera,

  • Tạo file script bằng cách vào bảng lệnh Project: Create > C# Script
  • Đặt tên là CameraController

Dclick file CameraController.cs để mở file và nhập vào đoạn code sau

Bước 3: Liên kết quả banh với file CameraController.cs

Đóng cửa sổ MonoDevelop, quay lại màn hình Unity. Trong Hierachy, vẫn đang chọn Main Camera, kéo Player vào ô Player trong Inspector > Camera Controller

Nếu Camera Controller không xuất hiện trong bảng lệnh inspector của Main camera, hãy kéo file CameraController.cs từ Project vào Main Camera trong Hierachy

Bước 4: Chạy chương trình

  • Bật nút Play
  • Nhấn các nút mũi tên để di chuyển quả banh

 


Giải thích

Còn một cách khác để gắn camera chạy theo một đối tượng chuyển động, bạn có thể kéo Main camera vào Player, để đối tượng camera trở thành con của trái banh, và như thế trái banh đi đâu camera sẽ theo đó.

Tuy nhiên trường hợp này là trái banh lăn, camera dính theo nên sẽ bị cũng lộn tùng phèo. Vì vậy hay nhất là dùng script tách camera cách đối tượng 1 khoảng cách cố định mà không ảnh hưởng quả cầu xoay.

Đó là gán tọa độ camera cách tọa độ quả banh 1 khoảng cách cố định

Với hàm Start ()

Khai báo biến offset lấy giá trị khoảng cách giữa vị trí của Main CameraPlayer

void Start () {
offset = transform.position - player.transform.position;
}

biến offset có kiểu Vector3 sẽ lưu giá trị tọa độ x,y,z là khoảng cách của Main camera và Player

transform.position là vị trí của camera thiết lập trong transform position bảng lệnh inspector

Với hàm LateUpdate ()

Sử dụng hàm LateUpdate() thay hàm Update (hay fixedUpdate)

void LateUpdate () {
transform.position = player.transform.position + offset;
}

Sử dụng hàm LateUpdate() tốt nhất trong trường hợp này, do LateUpdate() cũng thực thi theo từng frame như Update, nhưng nó đảm bảo sẽ chạy sau tất cả các tiến trình khác

transform.position lúc này là vị trí của camera cập nhật trong từng frame mà đối tượng đang di chuyển = luôn luôn phải tách ra 1 khoảng cách = offset

Link Video giới thiệu game: https://unity3d.com/learn/tutorials/projects/roll-ball-tutorial/introduction-roll-ball?playlist=17141

 

Leave a Reply

Your email address will not be published. Required fields are marked *

two × four =