UE4 データやパラメータなどの値をレベルを変更しても保持して扱う(Game Instance、Get Game Instance、Cast To Game Instance)
最初は「Game Mode」かなと思ったのですが、
「Game Mode」はレベルが変更されると失われるのですね。
こちらのブログをみてて違いがわかりました。
・GameMode、GameInstanceなどの違いについて
http://imoue.hatenablog.com/entry/2016/05/24/223150
「GameInstance」はゲームを起動している間でプロジェクトごとに1つ。
「GameMode」はマップ切り替えまででレベルごとに1つ。
ということみたいですね。ためになります。
というわけで、パーティーのデータやパラメータなどの保持に向いてそうな
「Game Instance」について調べてみることにしました。
いつもお世話になってるこちらのブログを参考に。
・UE4 レベルを跨いで値を保持するGameInstanceについて
http://unrealengine.hatenablog.com/entry/2014/08/28/203638
まずは「Game Instance」を継承したそのゲーム独自の「Game Instance」を作ります。
アセットの新規作成のブループリントクラスを選択し、

「Game Instance」を継承して「Game Instance」ブループリントを作成します。

そうするとこんな感じで「Game Instance」が作成されます。

このままではアセットとして作成されただけで、
プロジェクトには設定されていないため、使えるようにします。
「編集」の「プロジェクト」設定を選択し、

「マップ&モード」の中にある「Game Instance Class」に
作成した「Game Instance」を設定します。

こうすることで、独自の「Game Instance」がゲーム中で使えるようになります。
実際に使う場合はこんな感じでしょうか。

「Game Instance」を使う場合は「Get Game Instance」で取得したものを
「Cast To Game Instance」で独自の「Game Instance」にキャストを行って使います。
上の画像の場合、「New Game Instance」クラスにキャストして、
「New Game Instance」BPの中にあるBool型変数「New Bool」の値をとってきて表示しています。
こんな感じで値の保持と参照などを結構どこからでもできるので、
ゲーム全体で管理して使うようなものはなんとかなるのではないでしょうか。
もう少し詳しい内容についてこちらのブログにありました。
・【UE4】GameInstanceについて
http://meganeo.blog.shinobi.jp/ue4/%E3%80%90ue4%E3%80%91gameinstance%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
使い方としてはこういったことですね。例えば、オプション画面(オプション画面用Level)でゲーム内音量設定をした場合、その設定情報はゲーム内の音量に連動させなくてはならないため、ゲーム中画面(ゲーム用Level)に移行するまで保持しておかなくてはなりません。GameInstanceを使用して設定情報をオプション画面でSet、ゲーム画面でGetすることで、ゲーム内の共通の情報を扱うことができます(グローバル変数のような扱い)。
こういった機能がメインのようです。GameInstanceの機能に関して簡潔にまとめると以下の3点です。
・レベルを跨いだ値の保持
・ゲーム中のプレイヤー管理
・ネットワークリプレイの管理
それと、「GameInstance」の作成タイミングでエディタとスタンドアローンでことなるようです。
ここらへんは少し気を付けたほうがよいかもしれません。・PIE実行
実行の度にGameInstanceを作成
終了の度にGameInstanceを解放
・Standalone実行
実行時にGameInstanceを作成
終了時にGameInstanceを解放
| UE4 | 16:05 | comments:0 | trackbacks:0 | TOP↑