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

pdf 25 trang Gia Huy 16/05/2022 2490
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:

  • pdfbai_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

  1. THIẾT KẾ VÀ PHÁT TRIỂN GAME Bài 4: GameObject trong Unity
  2. 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
  3. Phần 1 GameObject TRƯƠNG XUÂN NAM 3
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. GameObject TRƯƠNG XUÂN NAM 9
  10. 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
  11. Phần 2 C# Script TRƯƠNG XUÂN NAM 11
  12. 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
  13. 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
  14. Phần 3 Làm việc với màn hình console TRƯƠNG XUÂN NAM 14
  15. 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
  16. 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
  17. Phần 4 Viết mã tìm hiểu về vòng đời của GameObject TRƯƠNG XUÂN NAM 17
  18. Tạo một scene thử nghiệm TRƯƠNG XUÂN NAM 18
  19. 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
  20. Vòng đời của Game Object TRƯƠNG XUÂN NAM 20
  21. Vòng đời của Game Object TRƯƠNG XUÂN NAM 21
  22. 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
  23. Update vs FixedUpdate TRƯƠNG XUÂN NAM 23
  24. Update vs FixedUpdate TRƯƠNG XUÂN NAM 24
  25. 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