Ở bài viết về PlayerController, chúng ta đã có đề cập qua GameMode và vai trò đơn giản của nó. Ở bài viết này, mình sẽ đi sâu hơn về nhiệm vụ cũng như những chức năng căn bản của nó nhé.

Nhiệm vụ của gamemode

Gamemode (GM) là đối tượng sẽ lưu giữ quyền kiểm soát của toàn session và map. Đồng thời, GameMode sẽ nắm giữ các lớp class cần thiết để tạo ra và quản lí trong quá trình chạy. Trong một môi trường online, GameMode chỉ tồn tại 1 thực thể duy nhất và chỉ người sở hữu hay tạo ra session có thể sử dụng được (chúng ta sẽ bàn về session ở bài viết sau nhé).

Đặc tính của GameMode có thể tóm gọn là:

  • Chỉ có duy nhất một, nắm giữ quyền lực cao nhất chi phối toàn bộ trong một màn chơi/session (luật chơi, các thực thể trong màn chơi,…)
  • Luôn luôn tồn tại trong tất cả màn chơi dù cho người dùng quên hay cố ý không gắn đi chăng nữa (class mặc định của GM sẽ được engine tạo ra)
  • Quản lí các lớp class cần thiết cho một màn chơi

Cách tạo một class GameMode

Cũng như cách tạo thông thường, ta chuột phải vào content browser và chọn New Blueprint Class và sau đó chọn Game Mode Base

Ảnh 1. Tạo class gamemode thừa kế

Giao diện tổng quan của class Gamemode(GM) sẽ như thế này

Ảnh 2. Giao diện tổng quan của một class GM

Mình đã nói qua cách gắn class PlayerController của ta vào GameMode để sử dụng ở bài viết về PlayerController nên mình sẽ chỉ nói sơ qua về phần quanh đỏ trên.

Phần khoanh đỏ trên là danh sách các lớp class cần thiết cho một màn chơi. Có thể kể đến các tên quen thuộc như là

  • Player Controller Class
  • Default Pawn Class
  • Game State Class

Ngoài ra còn nhiều class khác nữa nhưng ở level căn bản thì mình chỉ cần quan tâm những class trên là được 😀

Sử dụng GameMode

Để có thể sử dụng gamemode, ta bắt buộc phải gắn gamemode vào world settings

Ảnh 3. Gắn class GM vào world settings

Bạn có thể gắn các class GameMode khác nhau cho từng level nhé. Ví dụ ở menu ta có thể gắn MenuGM, ở phòng chờ ta có thể tạo lobbyGM,…

Một tips nhỏ để trường hợp bạn quên gắn GM cho level, đó là ta gắn vào Project settings

Ảnh 4. GM mặc định trong Project Settings

Một số chức năng và đặc tính của GameMode

Ngoài Tick hay BeginPlay là những chức năng căn bản của một Actor, thì ta có thể điểm sơ qua một số sự kiện xử lí như là OnPostLogin hay OnLogout:

Ảnh 5. OnPostLogin và OnLogout

Để có thể dùng 2 sự kiện này, các bạn có thể ấn vào mục Override cạnh tab Functions và chọn 2 sự kiện từ danh sách sổ xuống:

Ảnh 6. Sử dụng sự kiện của GM

Vậy 2 sự kiện đó có tác dụng gì và dùng khi nào ?

  • OnPostLogin : đây là sự kiện được gọi khi một player bắt đầu kết nối vào server (được GameMode quản lí). Sự kiện trả lại giá trị là con trỏ tới Controller kết nối vào. Tại đây, các bạn có thể thực hiện các bước như kiểm tra thông tin, set các giá trị căn bản của nó.

Lưu ý : Controller được trả lại là vật thể chỉ tồn tại ở trên server, và hàm này cũng chỉ được gọi ở trên server thôi nhé. Ví dụ người chơi khác kết nối vào thì họ sẽ không biết server làm những gì ở bước này đâu ^^

  • OnLogout : trái ngược với OnPostLogin, thì OnLogout được gọi khi một người chơi thoát khỏi server. Giá trị trả lại cũng là một con trỏ tới Controller đang thoát. Tại đây, các bạn có thể thực hiện các quy trình dọn dẹp, thông báo cần thiết.

Lưu ý : Y như trên nhé :v

Ngoài ra cũng có một số hàm các bạn có thể dùng như là FindPlayerStart

Ảnh 7. Hàm FindPlayerStart

Hàm này được dùng để bạn quyết định người chơi sẽ được tạo ra ở ví trị nào. Player ở input chính là người chơi đang hỏi bạn vị trí để tạo, và giá trị trả về là một actor (tức vị trí sẽ được dùng để tạo – thông thường là PlayerStart).

Kết luận

Gamemode có rất nhiều nhiều thứ mà bạn có thể sự dụng để điều khiển gần như toàn bộ phòng chơi. Class mà chúng ta đang dùng là GameModeBase – tức là class đầu tiên của cây GameMode, nên số lượng hàm và sự kiện sẽ ít hơn class thừa kế GameMode. Mình sẽ kết thúc bài viết ở đây, các bạn có thắc mắc gì có thể post comment ở dưới nhé 😀