開けた宝箱がレベルを切り替えても開いたままにしておいたり、完了したイベントが再発生しないようにするためのイベントフラグ管理。
- UE5.7.4の三人称テンプレートを使用しました。
- ビットマスクでイベントフラグ管理をします。
イベントフラグ管理のやり方です。
最初のレベルでオブジェクトに触れるとイベントが発生。
レベル遷移してから戻って来た時、そのオブジェクトに触れてもイベントが発生しないようにします。
これを理解する事で、開けた宝箱はずっと開けっぱなしにできたり、倒したボスがレベルを切り替えても復活しないようにできます。
列挙型 E_Flag
これはメインイベントや宝箱など、何のフラグを管理するするかの列挙型です。
エニュメレーターを2つ作成します。
- MainEvent
- FieldItem
列挙型 E_Flag_MainEvent
メインイベントを管理するための列挙型です。
今回はエニュメレーターを2つ作成します。
- OpeningEvent
- EndingEvent
詳細設定の「ビットマスクフラグ」にチェックを入れる必要があります。

今回はエニュメレーターを1つしか作成していませんが、1つの列挙型で32個のフラグを管理できます。
33個以上ある場合は、新たな列挙型を作成する必要があります。
列挙型 E_Flag_FieldItem
フィールドに落ちているアイテムを管理するための列挙型です。
今回はエニュメレーターを2つ作成します。
- Item_00
- Item_01
詳細設定の「ビットマスクフラグ」にチェックを入れる必要があります。

ゲームインスタンス
ゲームインスタンスを作成し、名前はBP_GameInstanceにしました。
編集 > プロジェクト設定 > マップ&モード > ゲームインスタンスクラス にBP_GameInstanceを指定します。
ゲームインスタンスはレベル遷移しても変数の値がリセットされません。
変数
変数を追加します。
■変数
Flag_MainEvent – Integer
・詳細の「ビットマスク」にチェックを入れる。
・詳細の「ビットマスク列挙型」にE_Flag_MainEventを指定。
Flag_FieldItem – Integer
・詳細の「ビットマスク」にチェックを入れる。
・詳細の「ビットマスク列挙型」にE_Flag_FieldItemを指定。

関数:Flag_On
・Flag_Onのインプットは、
Flag – E_Flag
もう1つの Bitmask – Integer は、Make Bitmaskを配置してFlag_Onへ線を伸ばします。

関数:Flag_Check
フラグがONなのかOFFなのかチェックする関数を作成します。
Flag_Onを複製して名前変更して編集すると楽です。
イベントアクタ BP_Event
簡単なイベント用アクタを作成します。
名前はBP_Eventにしました。
接触すると「オープニングイベント開始」と表示されるだけです。
追加するコンポーネントはSphere Collisionのみ。
目視できるようにSphere詳細のHidden in Gameのチェックを外しておきましょう。
SphereのOn Component Begin Overlap イベントを編集します。

ワープポイントアクタ BP_Warp
レベルの遷移をしたいですから、触れるとレベル遷移するワープポイントアクタを作成します。
BP_Eventを複製し、BP_Warpに名前変更して編集すると楽です。
SphereのOn Component Begin Overlap イベントを編集します。

変数Level Nameは「インスタンス編集」にチェックを入れます。
新規レベル L_Test
新規レベル > 基本 でレベル作成。
レベルの名前はL_Testにします。
プレイヤースタートの近くにBP_Warpを配置し、詳細のLevel Nameに「Lvl_ThirdPerson」と入力します。
レベル Lvl_ThirdPerson
Lvl_ThirdPersonを開く
BP_Warpを配置し、詳細のLevel Nameに「L_Test」と入力します。
BP_Eventも配置します。
テストプレイ
フラグ管理していない状態でのテストプレイをします。
Lvl_ThirdPersonからゲームが始まります。
BP_Eventに接触すると「オープニングイベント開始」と表示されます。
BP_Warpに接触して、L_Testに遷移。
L_TestでBP_Warpに接触して、Lvl_ThirdPersonに遷移。
BP_Eventに接触すると「オープニングイベント開始」と表示されてしまいます。
フラグ管理していないため、レベル遷移によってアクタがリセットされて何度もオープニングイベントが起動してしまうわけです。
イベントアクタ BP_Event
・変数のFlag_MainEventは、Flag OnのBitmaskから線を伸ばして変数へ昇格。詳細の「インスタンス編集可能」と「ビットマスク」にチェックを入れて「ビットマスク列挙型」にE_Flag_MainEventを指定。

・Cast To BP_GameInstanceは右クリックメニューから純粋化しています。ゲームインスタンスは常にロードされていますので、キャストしても負荷にはなりません。
再テスト
配置済のBP_Eventの詳細のFlag Main EventをOpeningEventにする。

この状態でテストプレイ。
まずBP_Eventに触れると「オープニングイベント開始」と表示され、ここでフラグがTrueになってゲームインスタンスに保存されます。
レベル遷移して戻って来てBP_Eventに接触すると、ゲームインスタンスのフラグがチェックされてイベントは開始しません。
この基本構造を理解すれば、Flag_FieldItemにも応用できますし、新たなフラグカテゴリーも追加できます。
イベントフラグの変数はゲームインスタンスにありますから、セーブゲームへの保存もやりやすいです。





コメント