最初に
この記事はUE C++を用いてGameModeを自作する方法の記事となります。間違いや更に良い方法があった場合にはそっとTwitter( @ろっさむ )やコメント、修正リクエストなどでお知らせ頂けるととても有難いです。
作業環境
記事内で使用する作業環境は以下の通りとなります。
- Unreal Engine:4.23
- Visual Studio:Community 2017 or Community 2017 for Mac or Enterprise 2019
GameModeの作り方
通常のGameModeはマルチプレイでの対戦ゲーム制作に適した機能が多く含まれていますが、それ以外のジャンル(例えば一人用アクションゲームなど)の場合には、GameModeBaseから継承した自作用のGameModeを作る方が余計な機能を省いてクリーンにカスタマイズを行うことができます。
新規追加 > 新規C++クラスから「全てのクラスを表示」にチェックマークをつけ、検索ボックスからGameModeBaseを入力し選択して「次へ」を押下します。
新規クラスに任意の名前+GameModeと名前を付け任意のフォルダ下にクラスを作成します。
ここで、クラスをパブリックにするかプライベートにするか選択ができますが、これはモジュールの外側にクラスを公開するか否かという選択になります。UEアプリは1つのモジュールで構成されるため、基本的にはプライベートとするのがよいでしょう。
TODO : 検証(プラグインは自身のアプリとは別のモジュールであり、基本パブリックなクラスで構成されています。プラグイン導入時にはそのままプラグインが持つパブリックなクラスの導入が必要となります。)
これだけでカスタマイズ用のGameModeクラスが作成できました。また、プロジェクト専用のベースクラスを作成することで後々柔軟に拡張やバグ対応を行うことができます。
自作GameModeの適用
次に設定 > ワールドセッティングを押下し、ワールドセッティングタブを開きます。
タブ内のGameModeにてGameMode Overrideという項目があるので、そこを自作したGameModeへ変更します。今回は先ほど作成したBaseクラスを更に継承したCPP_StartGameModeというクラスを作成し、ここに設定しています。
初期セッティングをC++で行う
これだけでは味気ないので、最低限の設定でC++側からThridPersonのキャラクターBPであるThirdPersonCharacterをDefault Pawn Classに設定して動かしてみましょう。
尚、C++でキャラクタークラスから作成してSpawnまでする場合の手順は以下の記事にまとめてあります。
// TODO: これからまとめる
Axis Mappingsを設定する
まずはヘッダーメニューのEditからProject Settings...を開きます。
次にEngine > Inputを開いてAxis Mappingsという項目を探します。ここで、以下の画像のようにMoveXとMoveYを追加します。
次に、ThirdPersonCharacterというBPを開き、InputAxis MoveForwardをInputAxis MoveYに、Input Axis MoveRightをInputAxis MoveXに置き換えます。
ここまで出来たら次にC++側から、このThirdPersonCharacterをDefault Pawn Classに設定するよう変更してみます。
C++からDefaultPawnClassを設定する
GameModeにおけるDefault値はコンストラクタで設定するのが良いでしょう。
ACPP_StartGameMode::ACPP_StartGameMode()
:Super()
{
// パスの最後には`_c`をつけるよう注意してください。
FString Path = "/Game/ThirdPersonBP/Blueprints/ThirdPersonCharacter.ThirdPersonCharacter_c";
ConstructorHelpers::FObjectFinder<UClass> CharacterBP(*Path);
TSubclassOf<AActor> ThirdPersonCharacter = CharacterBP.Object;
if (ThirdPersonCharacter != nullptr)
{
DefaultPawnClass = ThirdPersonCharacter;
}
}
このコードを記述して実行すると、ワールドセッティングタブ内のSelected GameMode > Default Pawn ClassがThirdPersonCharacterになっていることが確認できると思います。これでステージ内にPlayer Startを設置することでThirdPersonCharacterがSpawnされることと思います。






