6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

一人UE4 & C++Advent Calendar 2019

Day 3

【UE4】C++で専用GameModeを作成してDefault値を変更する

Last updated at Posted at 2019-12-02

最初に

この記事は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を入力し選択して「次へ」を押下します。

image.png

新規クラスに任意の名前+GameModeと名前を付け任意のフォルダ下にクラスを作成します。

ここで、クラスをパブリックにするかプライベートにするか選択ができますが、これはモジュールの外側にクラスを公開するか否かという選択になります。UEアプリは1つのモジュールで構成されるため、基本的にはプライベートとするのがよいでしょう。
TODO : 検証(プラグインは自身のアプリとは別のモジュールであり、基本パブリックなクラスで構成されています。プラグイン導入時にはそのままプラグインが持つパブリックなクラスの導入が必要となります。)

image.png

これだけでカスタマイズ用のGameModeクラスが作成できました。また、プロジェクト専用のベースクラスを作成することで後々柔軟に拡張やバグ対応を行うことができます。

自作GameModeの適用

次に設定 > ワールドセッティングを押下し、ワールドセッティングタブを開きます。

image.png

タブ内のGameModeにてGameMode Overrideという項目があるので、そこを自作したGameModeへ変更します。今回は先ほど作成したBaseクラスを更に継承したCPP_StartGameModeというクラスを作成し、ここに設定しています。

image.png

初期セッティングをC++で行う

これだけでは味気ないので、最低限の設定でC++側からThridPersonのキャラクターBPであるThirdPersonCharacterDefault Pawn Classに設定して動かしてみましょう。

尚、C++でキャラクタークラスから作成してSpawnまでする場合の手順は以下の記事にまとめてあります。

// TODO: これからまとめる

Axis Mappingsを設定する

まずはヘッダーメニューのEditからProject Settings...を開きます。

image.png

次にEngine > Inputを開いてAxis Mappingsという項目を探します。ここで、以下の画像のようにMoveXMoveYを追加します。

image.png

次に、ThirdPersonCharacterというBPを開き、InputAxis MoveForwardInputAxis MoveYに、Input Axis MoveRightInputAxis MoveXに置き換えます。

image.png

ここまで出来たら次にC++側から、このThirdPersonCharacterDefault 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 ClassThirdPersonCharacterになっていることが確認できると思います。これでステージ内にPlayer Startを設置することでThirdPersonCharacterSpawnされることと思います。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?