Tiếp tục trong series UE4 Framework hôm nay là về PlayerState. Cùng tìm hiểu PlayerState là gì và tại sao, đặc biệt là trong môi trường online, nó lại quan trọng như vậy nhé.

Nhiệm vụ của PlayerState

Nếu như PlayerController được coi là bộ não con người, Character/Pawn là thân thể, thì PlayerState chính là căn cước công dân, ID hay nôm na là chứng minh nhân dân vậy đó. Các đặc tính cơ bản của PlayerState có thể kể đến như là

  • Lưu trữ thông tin đặc trưng của một cá thể (PlayerController) như là tên, id, ping, địa chỉ,…
  • Trong môi trường online, PlayerState tồn tại ở mọi máy kết nối, cho phép người dùng có thể truy cập thông tin đặc trưng của những người kết nối trong cùng một session.

Cách tạo một PlayerState

Cũng như cách tạo của các class đã đề cập ở bài viết trước

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

Sử dụng PlayerState

Để sử dụng PlayerState, ta phải gắn class vừa tạo trong GameMode settings. Cách thức y như chúng ta làm cho PlayerController hay GameState nhé!

Ảnh 2. Gắn class thừa kế PlayerState trong GameMode

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

Để có thể trỏ đến PlayerState để sử dụng, có thể dễ dàng gọi thẳng PlayerState trong PlayerController và Character

Ảnh 3. Trỏ đến biến PlayerState lưu trong Character/PlayerController

Tips: Khi trỏ tới PlayerState ở BeginPlay của cả Character/PlayerController, giá trị trả về thường sẽ là nullptr (không tồn tại). Đó là bởi vì PlayerState cần thời gian để có thể kích hoạt, thường khá là nhỏ (0.5s thường là quả đủ để có thể dùng được). PlayerState ở PlayerController sẽ tồn tại sớm hơn với PlayerState ở Character nhé, bởi vì PlayerController bao giờ cũng có trước Character!

Ở blueprints, một số biến căn bản của PlayerState có thể kể đến như là

Ảnh 4. Biến căn bản của PlayerState

Ý nghĩa của các biến có lẽ quá hiển nhiên rồi 😀 Có một lưu ý nhỏ là, giá trị Ping trả lại là Byte, chứ không phải là ms, bạn nào muốn hiển thị ms như mọi game thì nhớ chia 4 nhé!

Cách đơn giản và phổ dụng nhất để những người chơi cùng một session truy xuất PlayerState của những người chơi khác đó là thông qua mảng PlayerArray trong GameState ta đã đề cập từ bài viết trước

Ảnh 5. Truy xuất tất cả tên người chơi trong cùng session

Kết luận

PlayerState về chức năng thì đơn giản chi như trên. Căn bản thì nó là một cái Actor để lưu trữ các thông tin của người sở hữu và có thể truyền đến cho những người khác. Nếu cá nhân bạn phát triển game single hay offline, thì có vẻ PlayerState sẽ không quan trọng lắm đâu :p