最初に
この記事は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
されることと思います。