Bài giảng Thiết kế và phát triển trò chơi máy tính: Bài 4 GameObject trong Unity cung cấp cho người học những kiến thức như: GameObject; C# Script; Làm việc với màn hình console; Viết mã tìm hiểu về vòng đời của GameObject. Mời các bạn cùng tham khảo!
THIẾT KẾ VÀ PHÁT TRIỂN GAME Bài 4: GameObject Unity Nội dung GameObject C# Script Làm việc với hình console Viết mã tìm hiểu vòng đời GameObject TRƯƠNG XUÂN NAM Phần GameObject TRƯƠNG XUÂN NAM GameObject ▪ GameObject đối tượng tất hình game unity ▪ Mỗi Game có nhiều Scene (màn hình) ▪ Mỗi Scene có nhiều GameObject ▪ Unity sử dụng cách tiếp cận “phi hướng đối tượng” việc xây dựng đối tượng Scene ▪ Tất đối tượng GameObject ▪ GameObject sealed class (không thể kế thừa) ▪ Các kiểu GameObject làm phong phú khác cách gắn thêm nhiều component với giá trị thuộc tính khác TRƯƠNG XUÂN NAM GameObject ▪ Một GameObject rỗng, tạo ▪ Tên “Vung Trang” ▪ Chưa có tag, thuộc layer mặc định ▪ Component: Transform TRƯƠNG XUÂN NAM GameObject ▪ GameObject “camera”: ▪ ▪ ▪ ▪ Tên “Main Camera” Có tag “MainCamera” Thuộc layer mặc định Component: • Transform • Camera • Flare Layer • Audio Listener TRƯƠNG XUÂN NAM GameObject ▪ GameObject “May Bay”: ▪ ▪ ▪ ▪ Tên “May Bay” Chưa có tag Thuộc layer mặc định Component: • Transform • Sprite Renderer • May Bay (Script) • Ten May Bay??? • Sprites-Default??? TRƯƠNG XUÂN NAM GameObject ▪ Unity tạo sẵn nhiều loại component ▪ Bằng việc kết hợp component, lập trình viên tạo loại GameObject khác ▪ Như vậy: đưa tính vào game component hỗ trợ chưa có Camera UI Object Script Video 2D Objects Game Object 3D Objects Effects TRƯƠNG XUÂN NAM Light Audio GameObject TRƯƠNG XUÂN NAM GameObject ▪ GameObject tạo nhiều cách khác nhau: “By design”: tạo từ đầu Scene thiết lập thuộc tính trực tiếp từ hình thiết kế “By code”: tạo script (tạo GameObject rỗng thêm component, tất code) “From an instance”: tạo cách tạo đối tượng có hiệu chỉnh (bằng code) “From file”: nạp từ Resource (và hiệu chỉnh, tất nhiên) ▪ Kinh nghiệm: không nên tạo/hủy GameObject nhiều, nên tái sử dụng (object pooling) TRƯƠNG XUÂN NAM 10 Phần C# Script TRƯƠNG XUÂN NAM 11 Vai trò script Unity ▪ Về chất Unity coi việc chơi game trình tương tác với GameObject ▪ Script component đặc biệt ▪ Viết C# Javascript ▪ Luôn kế thừa từ MonoBehaviour ▪ Nhiệm vụ script: mang lại “phần hồn” cho GameObject ▪ Xử lý xem GameObject phản ứng tương tác chơi ▪ Bản thân tên lớp cha nói lên điều TRƯƠNG XN NAM 12 Vai trị script Unity ▪ Script C# viết MonoDevelop Visual Studio công cụ tương đương ▪ Tất nhiên nên dùng MonoDevelop ▪ Kinh nghiệm: nên mở sẵn unity documents MonoDevelop hỗ trợ kém, đặc biệt với bạn làm quen với unity ▪ Có thể dùng lẫn script C# javascript dự án, cách tham chiếu đối tượng chéo class lộn xộn ▪ Khơng có lý hợp lý cho việc dùng lẫn TRƯƠNG XUÂN NAM 13 Phần Làm việc với hình console TRƯƠNG XUÂN NAM 14 Cửa sổ Console ▪ Vai trò giống cửa sổ CMD Windows ▪ Rất quen thuộc với phần mềm IDE truyền thống ▪ Visual Studio, Eclipse, Android Studio,… ▪ Vai trị chủ yếu để in thơng tin gỡ lỗi cảnh báo ▪ Tất nhiên có ứng dụng hay sử dụng console ▪ Console unity mặc định hỗ trợ unicode ▪ In thơng báo hình: ▪ Dùng phương thức print (của MonoBehaviour) ▪ Dùng Debug.Log, Debug.LogWarning, Debug.LogError tùy vào tình game TRƯƠNG XUÂN NAM 15 Cửa sổ Console ▪ Một vài chức bản: ▪ ▪ ▪ ▪ “Clear”: xóa hình “Collapse”: thu gọn dịng giống lại làm “Clear on Play”: xóa hình bắt đầu thử game “Error Pause”: dừng gặp lỗi ▪ Có đếm số lần log, warning error in ▪ Kinh nghiệm: log file gặp tình phức tạp TRƯƠNG XUÂN NAM 16 Phần Viết mã tìm hiểu vịng đời GameObject TRƯƠNG XUÂN NAM 17 Tạo scene thử nghiệm TRƯƠNG XUÂN NAM 18 Vòng đời Game Object using System.Collections; using System.Collections.Generic; using UnityEngine; public class Den : MonoBehaviour { void Awake() { print("Awake"); } void Start() { print("Start"); } void OnDisable() { print("OnDisable"); } void OnEnable() { print("OnEnable"); } } TRƯƠNG XUÂN NAM 19 Vòng đời Game Object TRƯƠNG XUÂN NAM 20 Vòng đời Game Object TRƯƠNG XUÂN NAM 21 Update vs FixedUpdate using System.Collections; using System.Collections.Generic; using UnityEngine; public class Den : MonoBehaviour { void Update() { print("Update time :" + Time.deltaTime); } void FixedUpdate() { print("FixedUpdate time :" + Time.deltaTime); } } TRƯƠNG XUÂN NAM 22 Update vs FixedUpdate TRƯƠNG XUÂN NAM 23 Update vs FixedUpdate TRƯƠNG XUÂN NAM 24 Nhận đầu vào từ bàn phím void Update() { if (Input.GetKey(KeyCode.W)) { print("Up"); transform.Translate(0, speed * Time.deltaTime, 0); } if (Input.GetKey(KeyCode.S)) { print("Down"); transform.Translate(0, -speed * Time.deltaTime, 0); } if (Input.GetKey(KeyCode.A)) { print("Left"); transform.Translate(-speed * Time.deltaTime, 0, 0); } if (Input.GetKey(KeyCode.D)) { print("Right"); transform.Translate(speed * Time.deltaTime, 0, 0); } } TRƯƠNG XUÂN NAM 25 ... print("FixedUpdate time :" + Time.deltaTime); } } TRƯƠNG XUÂN NAM 22 Update vs FixedUpdate TRƯƠNG XUÂN NAM 23 Update vs FixedUpdate TRƯƠNG XUÂN NAM 24 Nhận đầu vào từ bàn phím void Update() { if (Input.GetKey(KeyCode.W))... print("OnDisable"); } void OnEnable() { print("OnEnable"); } } TRƯƠNG XUÂN NAM 19 Vòng đời Game Object TRƯƠNG XUÂN NAM 20 Vòng đời Game Object TRƯƠNG XUÂN NAM 21 Update vs FixedUpdate using System.Collections;... Effects TRƯƠNG XUÂN NAM Light Audio GameObject TRƯƠNG XUÂN NAM GameObject ▪ GameObject tạo nhiều cách khác nhau: “By design”: tạo từ đầu Scene thiết lập thuộc tính trực tiếp từ hình thiết kế “By