凛(kagring)のUE4とUnityとQt勉強中ブログ

2016 年から UE4 を触り始めました。勉強したもののメモ用のブログです。C++ での Qt、Unity も少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

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」を作ります。
アセットの新規作成のブループリントクラスを選択し、
GameInstance000.png
「Game Instance」を継承して「Game Instance」ブループリントを作成します。
GameInstance001.png
そうするとこんな感じで「Game Instance」が作成されます。
GameInstance002.png

このままではアセットとして作成されただけで、
プロジェクトには設定されていないため、使えるようにします。
「編集」の「プロジェクト」設定を選択し、
GameInstance003.png
「マップ&モード」の中にある「Game Instance Class」
作成した「Game Instance」を設定します。
GameInstance004.png
こうすることで、独自の「Game Instance」がゲーム中で使えるようになります。

実際に使う場合はこんな感じでしょうか。
GameInstance005.png
「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↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/290-457e6b80

TRACKBACK

PREV | PAGE-SELECT | NEXT