Trong bài viết hôm nay, ta lại tiếp tục đề cập đến một yếu tố cũng không thể thiếu trong một level, đó chính là GameState
Nhiệm vụ của GameState
Nếu GameMode là giám đốc/sếp điều hành mọi thứ thì GameState có thể được coi như là thư kí hay trợ lí giám đốc vậy. Đặc tính của GameState có thể được hiểu đơn giản như sau
- GameState giữ các giá trị truyền xuống từ GameMode mà người dùng có thể truy suất và sử dụng được
- GameState luôn tồn tại song song với GameMode, và GameState đều có một phiên bản copy trên mỗi máy người chơi
Cách tạo một GameState
Khác với cách tạo trước đó của GameMode hay PlayerController, lần này chúng ta sẽ phải chọn class thừa kế ở khung dưới
Cũng như bao class được thừa kế từ Actor, GameState (GS) cũng sẽ có BeginPlay và Tick
Sử dụng GameState
Để có thể sử dụng GameState mà ta vừa thừa kế, ta phải cho GameMode biết class mà ta muốn dùng
Hoặc có thể gắn trực tiếp ở setting trong World Settings
Tips: Một lưu ý nho nhỏ khi tạo class thừa hưởng GameState, class GameStateBase chúng ta đang dùng trong bài viết chỉ có thể được gắn vào class GM thừa hưởng từ GameModeBase. Nên nếu bạn muốn dùng class thừa hưởng từ GameState, thì nhớ rằng GM cũng phải thừa hưởng từ GameMode nhé.
Để có thể trỏ đến GameState và sử dụng, đơn giản nhất là ta gọi hàm GetGameState và cast giá trị trả lại vào class GameState mà ta tạo trước đó
Một số chức năng và đặc tính của GameState
Cũng như các class thừa hưởng từ actor, GS cũng sẽ có BeginPlay và Tick. Nhưng chúng ta sẽ đi sâu vào một số thứ đặc chưng ở GS hơn.
GS có một biến rất hữu ích, đặc biệt trong môi trường online nhiều người cùng kết nối vào một session, đó là PlayerArray
PlayerArray là biến lưu trữ tất cả PlayerState của tất cả người chơi trong cùng một session, và luôn được cập nhật liên tục mỗi khi có ai kết nối vào (GameMode đảm nhiệm việc cập nhật nhé).
Thao tác ở trên hình ảnh 5 chỉ đơn giản là ta lặp qua tất cả phần tử có trong biến PlayerArray. Một số ứng dụng đơn giản ta có thể dùng như là:
- Lấy thông tin căn bản của những người trong phòng chơi (tên, ping, ID, điểm,…)
- Hết =)) Đùa chứ còn những cái khác có thể làm nhưng mà về căn bản thì mọi người hay dùng biến này với mục đích như trên 😀
Ngoài ra, GameState còn một số hàm khác như là:
Các hàm như Get Player Respawn Delay, Has Begun Play,.. đều là những hàm mà tại đó, giá trị của chúng là các đặc tính của một session, và tất nhiên.. được quản lí bởi GameMode 😀
GameState có rất nhiều hàm khác hữu ích nữa nhưng đa phần đều ở C++. Với người dùng blueprint thì những hàm trên đã đủ để sử dụng 😀 Khi chúng ta bàn tới môi trường online (hay là Multiplayer), chúng ta sẽ đi sâu hơn về GameState nhé!
Kết luận
Với người dùng phát triển ứng dụng offline (hay la Singeplayer) thì có lẽ GameState hơi vô dụng bởi vì bạn hoàn toàn có thể gọi thẳng lên GameMode để xử lí. Tuy nhiên với môi trường online (hay là Multiplayer) thì GameState là một class không thể thiếu bởi vì nó sẽ là thành phần trung gian truyền các giá trị ở GameMode mà người dùng đáng ra không thể biết được. Có gì thắc mắc đừng ngại comment ở dưới nha mọi người!
Comments