Design Patterns For Game Development

Học các mẫu thiết kế

Mặc dù bạn có thể làm việc như một lập trình viên game mà không cần học các mẫu thiết kế, nhưng việc học nó thực sự giúp bạn trở thành một lập trình viên giỏi hơn. Xét cho cùng, các mẫu thiết kế được định nghĩa như vậy vì chúng là các giải pháp phổ biến cho các vấn đề ai cũng từng gặp.

Các kỹ sư phần mềm luôn tìm hiểu lại chúng trong suốt quá trình làm việc. Và có lẽ bạn đã vô tình triển khai một số mẫu này.

Hãy tập luyện để sử dụng chúng. Điều đấy có thể giúp bạn:

  • Học OOP: Các mẫu thiết kế không phải là bí ẩn hay khó tiếp cận. Chúng là những cách phổ biến để giải quyết các vấn đề thường ngày trong quá trình phát triển. Chúng có thể cho ta biết có bao nhiêu developer khác gặp vấn đề tương tự. Và nhớ rằng, ngay khi bạn không sử dụng các mẫu thiết kế, vẫn có người khác sử dụng.

  • Trao đổi với Developer khác: Các mẫu thiết kế có thể đóng vai trò là cách viết tắt khi cần giao tiếp giữa những người có chuyên môn hay trong cùng một team. Ví dụ như “command pattern” hay “object pool” và Unity developer có kinh nghiệm sẽ hiểu chính xác những gì đang được thực hiện.

  • Khám phá Framework mới: Khi bạn nhập một gói tích hợp hoặc thứu gì đó từ Asset Store, chắc chắn bạn sẽ gặp ít nhiều mẫu được nói đến ở đây. Nhận biết được cá mẫu thiết kế giúp bạn hiểu cách framework hoạt động và quá trình tư duy tiến tới việc tạo ra nó.

Tất nhiên, không phải tất cả các mẫu thiết kế đều được áp dụng với mọi game.

Như bất kỳ công cụ nào khác, tính phù hợp của mẫu thiết kế còn tùy thuộc vào bối cảnh. Mỗi mẫu đều có ưu điểm trong những tình huống nhất định và cũng đi kèm với một số nhược điểm. Mọi quyết định trong quá trình phát triển phần mềm đều có sự đánh đổi.

Bạn có tạo GameObject khi đang chạy? Nó có ảnh hưởng đến hiệu suất? Làm sao để cấu trúc code để khắc phục điều đó?

Các mẫu trong Unity

Unity triển khai sẵn một số thiết lập mẫu phát triển game, giúp bạn khỏi những rắc rối khi tự mình viết chúng. Bao gồm:

  • Game loop: Cốt lõi của tất cả trò chơi là một vòng lặp vô hạn phải hoạt động không phụ thuộc vào tốc độ xung nhịp, bởi vì phần cứng cung cấp sức mạnh cho game có thể thay đổi rất nhiều. Để tính đến các máy tính có tốc độ khác nhau, các nhà phát triển game thường sử dụng một bước thời gian cố định (với thiết lập FPS) và một bước thời gian biến đổi trong đó công cụ đo thời gian đã trôi qua từ khung hình trước đó.
    Unity xử lý việc này, vì vậy bạn không cần phải triển khai chúng. Bạn chỉ cần quản lý game bằng cách sử dụng phương thức MonoBehaviour như Update, LateUpdate, và FixedUpdate.

  • Update: Trong game của bạn, bạn sẽ thường cập nhật hành vi của mỗi đối tượng theo từng khung hình một. Trong khi bạn có thể tạo lại thủ công trong Unity, class MonoBehaviour sẽ tự động thực hiện việc này. Chỉ cần sử dụng cá phương thức Update, LateUpdate, hay FixedUpdate để sửa đổi GameObjects và components theo từng nhịp của đồng hồ game.

  • Prototype: Thông thường bạn sẽ cần sao chép object mà không ảnh hưởng đến bản gốc. Mẫu sáng tạo này giải quyết vấn đề sao chép và nhân bản một object để tạo ra một object tương tự. Theo cách này, bạn tránh được việc phải định nghĩa một class riêng biệt để tạo ra mỗi loại object trong game.
    Hệ thống Prefab của Unity triển khai một dạng tạo mẫu cho GameObject. Nó cho phép bạn sao chép một object mẫu, hoàn chỉnh với các components của nó. Ghi đè các thuộc tính cụ thể để tạo Biến thể Prefab hoặc lập Prefab bên trong Prefab khác để tạo phân cấp. Sử dụng chế độ chỉnh sửa Prefab đặc biệt để chỉnh sửa Prefabs riêng lẻ hoặc trong bối cảnh.
  • Component: Hầu hết mọi người làm việc trong Unity đều biết mô hình này. Thay vì tạo các lớp lớn với nhiều nhiệm vụ, hãy xây dựng các component nhỏ hơn, mỗi thành phần thực hiện môt chức năng.
    Nếu bạn sử dụng component bằng cách lấy và chọn các component, bạn kết hợp chúng để được hành vi phức tạp hơn. Thêm các thành phần Rigibody và Collider dành cho vật lý. Thêm MeshFilter và MeshRenderer cho hình học 3D. Mỗi GameObject sẽ trở nên đầy đủ và độc lập từ chính bộ sưu tập các component.

Tất nhiên, Unity không thể làm tất cả mọi thứ cho bạn. Chắc chắn bạn sẽ cần các mẫu khác mà không được tích hợp sẵn. Chúng ta cùng khám phá một vài mẫu trong số này ở các chương tiếp theo.