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 qua thao tác nhấn các phím mũi tên trên bàn phím.

Để đối tượng không vuột mất khỏi khung hình, phần này chúng ta sẽ di chuyển camera đuổi theo đối tượng. Và như thế đối tượng luôn nằm giữa màn hình, chỉ có cảnh vật di chuyển mà thôi. (giống như ta ngồi trong 1 chiết xe đang chạy vậy) Camera mặc định là Main Camera trong Hierarchy. Khi click chọn, góc dưới cửa sổ Scene sẽ xuất hiện một màn hình camera thu nhỏ.

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

Lưu ý là camera luôn lơ lững, 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 Trong Inspector: Click chọn camera

  • 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

Trong Hierarchy: vẫn đang chọn Main camera

  • Trong Project:
    • Create > C# Script tạo file script
    • Đặt tên là CameraController.cs

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 phím mũi tên trên bàn phím để điều khiể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, để camera trở thành đối tượng con của trái banh, và như thế trái banh đi đâu camera luôn luôn theo đó. Tuy nhiên nếu trái banh lăn, camera dính theo nên cũng sẽ bị 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 hoạt động của quả cầu. Đó là gán tọa độ camera luôn cách quả banh 1 khoảng cố định

Với hàm Start ()

Khai báo biến offset là 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 [embed]https://youtu.be/Xcm5H2J95iI[/embed] Link Video giới thiệu game: https://unity3d.com/learn/tutorials/projects/roll-ball-tutorial/introduction-roll-ball?playlist=17141  

No comments

Leave your comment

In reply to Some User