関連ブログ
- [UE4][UE5]開発環境の容量を少しでも減らす 2024.08.14UE
- [UE5] PushModel型のReplicationを使い、ネットワーク最適化を図る 2024.05.29UE
- [UE5]マテリアルでメッシュをスケールする方法 2024.01.17UE
CATEGORY
2014.09.05UE4UE/ C++
改訂バージョン: Unreal Engine 4.21 |
UE4では、画面右上の入力欄やOutputLogウィンドウ等から、コンソールコマンドを実行することが可能です。
既存のコマンドにも多数の便利なものがありますが、開発中のタイトル専用のコマンドが欲しくなる時もあります。
今回は、そんなゲーム実行中に呼び出せるコンソールコマンドを実装する方法をご紹介します。デバッグなどに役立てて下さい。
まずは、CheatManagerを継承したクラスを用意します。
1.メインメニューから「File -> Add Code To Project…」を選択して、コード追加ウィンドウを開きます。
2.右上の「Show All Classes」をONにして、「CheatManager」を検索、選択して「Next>」ボタンを押します。
3.名前等を設定して「Create Class」ボタンを押します。今回は「MyCheatManager」と命名します。
このクラスは後で利用します。
CheatManagerはPlayerControllerクラスに登録して使用します。
先ほどの同様の手順で、「PlayerController」を継承したクラスを追加して下さい。
名前は「MyPlayerController」とします。
下記のように、CheatManagerを登録するコードを記述します。
1 2 3 4 5 6 7 8 9 |
// Fill out your copyright notice in the Description page of Project Settings. #include "MyPlayerController.h" #include "MyCheatManager.h" AMyPlayerController::AMyPlayerController() { CheatClass = UMyCheatManager::StaticClass(); } |
先ほど追加したPlayerControllerも、GameModeに登録して使用します。
GameModeクラスは、C++テンプレートでプロジェクトを作ると、自動的に追加されているはずです。
下記のように、PlayerControllerクラスを登録するコードを記述します。
1 2 3 4 5 6 7 8 9 |
// Fill out your copyright notice in the Description page of Project Settings. #include "MyProjectGameModeBase.h" #include "MyPlayerController.h" AMyProjectGameModeBase::AMyProjectGameModeBase() { PlayerControllerClass = AMyPlayerController::StaticClass(); } |
Unreal Editorを起動して、WorldSettingsウィンドウからGameModeを設定します。
1.「GameMode Override」のプルダウンから、先ほどコードに追記した「MyProjectGameModeBase」を選択します。
2.「Player Controller Class」に、自分で追加したクラスが登録されていることを確認します。
長々と登録作業ばかりでしたが、事前準備はこれでやっとオシマイです。
これで、コンソールコマンドを使用する準備が整いました。
最初に用意したMyCheatManagerに、コンソールコマンドに対応する関数を書いていきます。
ここから先は非常に簡単で、UFUNCTION(exec)と指定した関数を定義するだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/CheatManager.h" #include "MyCheatManager.generated.h" /** * */ UCLASS() class MYPROJECT_API UMyCheatManager : public UCheatManager { GENERATED_BODY() public: UFUNCTION(exec) void MyCheatCommand(); }; |
1 2 3 4 5 6 7 8 |
// Fill out your copyright notice in the Description page of Project Settings. #include "MyCheatManager.h" void UMyCheatManager::MyCheatCommand() { UE_LOG(LogTemp, Log, TEXT("MyCheatCommand !!!")); } |
これで、ゲームを実行中に、コンソールコマンドとして「MyCheatCommand」を使用出来ます。
また、コマンドの引数も、int32やFString等の基本的な型ならば、関数の引数を宣言しておけば自動的にパースしてくれます。
とてもお手軽です。
今回はデバッグ目的でCheatManagerを利用する方法をご紹介しましたが、UFUNCTION(exec)は、他にもいくつかのクラスで使用可能です。
(Pawn, PlayerController, GameModeなど)
特定ゲームモードでのみ有効なコマンドや、プレイヤーキャラクターを直接操作したい場合などは、こちらの方が便利かもしれません。
また、コンソールコマンドはBlueprintから呼び出すことも出来ます。
うまく利用して、便利なデバッグ機能を作っていきましょう。