Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 Game ModeとGame Mode Baseの違いについて

UE4.14からGame Mode Baseという新しいクラスが追加されています。

このクラス、わかってしまうと簡単なことなのですが、非常にわかりづらいハマりポイントがあるのでメモとして記事を残しておきます。

Game Mode BaseはGame Modeの親クラス

その名前の通り、Game Mode BaseクラスはGame Modeクラスです。

なぜこのような別クラスになったかと言うと、これまで用意されていたGame Modeクラスはネットワークマルチプレイヤー向けにマッチング機能が色々と追加されていきました。結果、Game Modeクラスはシンプルさがなくなり、Game Modeクラス自体が複雑な仕様となってきたために、別途用意されたのがGame Mode Baseクラスです。

どのノードがGame Modeクラス、もしくはGame Mode Baseクラスのノードかを調べるには、ブループリントAPIリファレンスを見るとわかります。

docs.unrealengine.com

ここで"Target is Game Mode"となっているものが、Game Mode専用のノードです。Game Mode BaseのノードはGame Modeでも呼び出せますのでご安心ください。

さて、少し厄介な問題は以下です。

Get Game Modeで取得できるのはGame Mode Baseクラス

表題の通り、問題は"Get Game Mode"ノードを使った時です。4.13以前はこのノードで"Game Mode"クラスのリファレンスを取得できました。が、4.14からは"Game Mode Base"のリファレンスになっています。

f:id:alwei:20170130153920p:plain

これがハマるポイントです。ちなみにブループリントクラス作成で作成できるデフォルトのGame ModeクラスもGame Mode Baseクラスに変更されています。

f:id:alwei:20170130154030p:plain

これを知らないままGame Mode Baseの継承クラスを作ります。以前までGame Modeクラスにあった"Restart Game"ノードが使えないということに気づきます。

docs.unrealengine.com

はい、もうお気付きかと思いますが、Game Mode Base継承クラスだとこれらのGame Modeにしかないノードが使えないのです。これを知らないまま利用していると、「あれ?Restart Gameが使えなくなった?」という勘違いを起こすことになります。

Game Mode Base継承クラスからキャストして無理矢理呼び出そうものなら、勿論ノードの呼び出しに失敗します。エラーもなにもでない状態で。

おそらくこの問題にハマる人はそう多くないかと思いますが、Game ModeとGame Mode Baseの違いくらいは理解しておいた方が何かあった時に冷静に対処できるでしょう。

また、Game Modeだけではなく、Game Stateクラスにもほぼ同じ理由でGame State Baseというクラスが追加されています。こちらも同様に気をつけておきましょう。

docs.unrealengine.com