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 - Trương Xuân Nam
Bạn đang xem 20 trang mẫu của tài liệu "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 - Trương Xuân Nam", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_thiet_ke_va_phat_trien_tro_choi_may_tinh_bai_4_gam.pdf
Nội dung text: 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 - Trương Xuân Nam
- THIẾT KẾ VÀ PHÁT TRIỂN GAME Bài 4: GameObject trong Unity
- Nội dung 1. GameObject 2. C# Script 3. Làm việc với màn hình console 4. Viết mã tìm hiểu về vòng đời của GameObject TRƯƠNG XUÂN NAM 2
- Phần 1 GameObject TRƯƠNG XUÂN NAM 3
- GameObject ▪ GameObject là đối tượng cơ bản trong tất cả các màn hình game của 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” trong việc xây dựng các đối tượng trong Scene ▪ Tất cả các đối tượng con đều là GameObject ▪ GameObject là sealed class (không thể được kế thừa) ▪ Các kiểu GameObject được làm phong phú và khác nhau bằng cách gắn thêm một hoặc nhiều component với các giá trị thuộc tính khác nhau TRƯƠNG XUÂN NAM 4
- GameObject ▪ Một GameObject rỗng, mới được tạo ra ▪ Tên là “Vung Trang” ▪ Chưa có tag, thuộc layer mặc định ▪ Component: Transform TRƯƠNG XUÂN NAM 5
- GameObject ▪ GameObject “camera”: ▪ Tên là “Main Camera” ▪ Có tag “MainCamera” ▪ Thuộc layer mặc định ▪ Component: • Transform • Camera • Flare Layer • Audio Listener TRƯƠNG XUÂN NAM 6
- GameObject ▪ GameObject “May Bay”: ▪ Tên là “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 7
- GameObject ▪ Unity tạo sẵn nhiều loại Camera UI component Script Object ▪ Bằng việc kết hợp các component, lập trình 2D Video Game Objects viên tạo ra các loại Object GameObject khác nhau 3D Effects ▪ Như vậy: không thể đưa Objects một tính năng mới vào game nếu component Light Audio hỗ trợ nó chưa có TRƯƠNG XUÂN NAM 8
- GameObject TRƯƠNG XUÂN NAM 9
- GameObject ▪ GameObject có thể được tạo ra bằng nhiều cách khác nhau: 1. “By design”: tạo từ đầu trong Scene và thiết lập thuộc tính trực tiếp từ màn hình thiết kế 2. “By code”: tạo bằng script (tạo một GameObject rỗng rồi thêm các component, tất cả đều bằng code) 3. “From an instance”: tạo mới bằng cách tạo bản sao của đối tượng đã có và hiệu chỉnh (bằng code) 4. “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 quá nhiều, nên tái sử dụng (object pooling) TRƯƠNG XUÂN NAM 10
- Phần 2 C# Script TRƯƠNG XUÂN NAM 11
- Vai trò của script trong Unity ▪ Về bản chất Unity coi việc chơi game là quá trình tương tác với các GameObject ▪ Script là một component đặc biệt ▪ Viết bằng C# hoặc Javascript ▪ Luôn kế thừa từ MonoBehaviour ▪ Nhiệm vụ chính của script: mang lại “phần hồn” cho các GameObject ▪ Xử lý xem GameObject phản ứng như thế nào đối với các tương tác trong màn chơi ▪ Bản thân tên lớp cha đã nói lên điều đó TRƯƠNG XUÂN NAM 12
- Vai trò của script trong Unity ▪ Script C# có thể được viết trong MonoDevelop hoặc Visual Studio hoặc một công cụ tương đương ▪ Tất nhiên là nên dùng MonoDevelop ▪ Kinh nghiệm: nên mở sẵn unity documents vì MonoDevelop hỗ trợ rất kém, đặc biệt với những bạn mới làm quen với unity ▪ Có thể dùng lẫn script C# và javascript trong cùng một dự án, nhưng cách tham chiếu đối tượng chéo giữa các class khá lộn xộn ▪ Không có lý do hợp lý nào cho việc dùng lẫn cả TRƯƠNG XUÂN NAM 13
- Phần 3 Làm việc với màn hình console TRƯƠNG XUÂN NAM 14
- Cửa sổ Console ▪ Vai trò giống như cửa sổ CMD trong Windows ▪ Rất quen thuộc với các 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 hoặc cảnh báo ▪ Tất nhiên vẫn có những ứng dụng hay sử dụng console ▪ Console của unity mặc định hỗ trợ unicode ▪ In thông báo ra màn 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ừng tình huống của game TRƯƠNG XUÂN NAM 15
- Cửa sổ Console ▪ Một vài chức năng cơ bản: ▪ “Clear”: xóa màn hình ▪ “Collapse”: thu gọn những dòng giống nhau lại làm một ▪ “Clear on Play”: xóa màn hình khi bắt đầu thử game ▪ “Error Pause”: dừng khi gặp lỗi ▪ Có bộ đếm số lần log, warning và error được in ra ▪ Kinh nghiệm: log ra file khi gặp những tình huống phức tạp TRƯƠNG XUÂN NAM 16
- Phần 4 Viết mã tìm hiểu về vòng đời của GameObject TRƯƠNG XUÂN NAM 17
- Tạo một scene thử nghiệm TRƯƠNG XUÂN NAM 18
- Vòng đời của 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 của Game Object TRƯƠNG XUÂN NAM 20
- Vòng đời của 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