Quay trở lại bài hôm nay sẽ là một class vô cùng quan trọng trong game mà bất cứ developer nào (single hay online) đều phải biết và dùng 😀

Nhiệm vụ của GameInstance

Khác với các class được thừa kế từ Actor như là GameMode, Character, PlayerController,.. và chỉ có thể tồn tại được khi level/map tồn tại thì GameInstance có thể tồn tại xuyên suốt quá trình ứng dụng đang mở, và chỉ biết mất khi người dùng tắt. Chính nhờ đặc thù đặc biệt của GameInstance là tồn tại trường tồn (trong khi app mở) nên một số ứng dụng căn bản có thể kể đến của GameInstance như là

  • Lưu trữ các giá trị, các hàm mà cần được truy xuất ở bất kì đâu và bất kì lúc nào
  • Xử lí những trường hợp mở map lỗi, hay thao tác lỗi trong quá trình sử dụng
  • Xử lí những quá trình khởi tạo cần thiết trước khi mọi thứ được tạo ra (như là Level)

Cách tạo một GameInstance

Hình 1. Tạo class thừa kế từ GameInstance

Giao diện tổng quan của GameInstance

Hình 2. Giao diện của class GameInstance

Khác với các class như là Character hay GameMode, phần Details của GameInstance không có gì cả. Lí do đơn giản là vì các biến của nó ở C++ hết rồi :v

Nhưng không sao, khi các bạn tạo biến của mình thì các giá trị sẽ được hiển thị lên thanh Details nhé.

Sử dụng GameInstance

Để sử dụng GameInstance, ta phải vào Project Settings -> Maps & Modes và gắn class ta vừa tạo và mục Game Instance Class

Hình 3. Gắn class GameInstance vào project

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

Một tính năng khá là hữu ích Unreal cung cấp đó là bạn có thể gọi đến GameInstance ở hầu như bất cứ đâu trong Blueprint chỉ bằng cách như sau

Hình 4. Trỏ và cast vào GameInstance của ta

Cách tạo một biến hay hàm ở GameInstance cũng tương tự như ở các blueprint khác nên mình sẽ không đề cập lại nhé. Bạn chỉ cần tạo biến/hàm bạn muốn và trỏ đến Game Instance như cách trên để sử dụng như bình thường.

Một số sự kiện đặc trưng của GameInstance

Hình 5. Sự kiện đặc trưng của GameInstance
  • Init: Sự kiện này được gọi khi mà ứng dụng vừa được mở lên. Nếu bạn muốn đọc file savegame thì có thể làm ở sự kiện này.
  • Shutdown: Sự kiện này trái ngược với hàm Init là nó sẽ được gọi khi ứng dụng chuẩn bị tắt.
  • NetworkError: Sự kiện này được gọi khi ở trong môi trường online, một sự cố liên quan tới network xảy ra (rớt mạng, trùng lặp địa chỉ, server kết nối ngưng trả lời,..)
  • TravelError: Sự kiện này được gọi khi mà quá trình di chuyển giữa cái map/level/session xảy ra lỗi (level không tồn tại phía đích đến, phiên bản không trùng khớp,..)

Lưu ý: Để dùng những sự kiện này, các bạn nhớ vào đây để chọn

Hình 6. Sử dụng sự kiện

Tips: Chắt lọc ra biến nào thật sự cần thiết để lưu trong GameInstance. Đừng lưu tất cả mọi thứ ở GameInstance chỉ vì nó có thể dùng được ở bất cứ đâu. Càng nhiều biến, trỏ thì càng tốn bộ nhớ đó nhé!

Kết luận

GameInstance thực sự rất hữu ích đối với quá trình chạy ứng dụng bởi đặc thù có thể sử dụng ở bất cứ nơi đâu và lúc nào. Ngoài ra với GameInstance, việc lưu trữ hay truy xuất giá trị trở nên đơn giản hơn bao giờ hết. Hãy lưu ý lại class này trong mọi project nhé!