UE4 コンソールコマンドとコンソール変数についてのメモ
概要
UnrealEngineでのコンソールコマンドとコンソール変数のメモ書きです。
自前で定義するコンソールコマンドとコンソール変数の追加方法を記載しています。
環境
Windows10
Visual Studio 2017
UnrealEngine 4.25
参考
UE4公式 : IConsoleManager
UE4公式 : C++ のコンソール変数
UE4公式 : EConsoleVariableFlags
UE4 のコンソールにユーザー定義のコマンドを追加する方法
[UE4] コンソールコマンドを追加する方法
コンソールコマンド
UEにはコンソールにてテキスト入力でコマンドを実行する機能があります。
アウトプットログに入力ボックスがあります。
あるいはエディタにて @
にて入力コマンドラインが表示されます。
コンソールコマンドはデバッグ機能を別途仕込むことができ、デフォルトで用意されているものでよく使われるものはパフォーマンス表示の stat unit
や デバッグカメラ機能の ToggleDebugCamera
やカルチャ変更の culture=ja
等など色々あります。
自作コンソールコマンドの追加
コマンド作成と登録
コンソールマネージャ IConsoleManager
に対して登録ができます。
メソッド指定とラムダ式指定をそれぞれ引数あり、なしで4つ登録してみます。
以下コード例。
UCLASS()
class TEST_API AMyActor
{
GENERATED_BODY()
// ..省略..
// 実行されるメソッド(引数なし)
UFUNCTION(BlueprintCallable, Category = "Test")
void ExecCmd();
// 実行されるメソッド(引数付き)
UFUNCTION(BlueprintCallable, Category = "Test")
void ExecCmd2(const TArray<FString>& Args);
};
RegisterConsoleCommand
にてコマンドを登録します。
第1引数がコマンド名、第2引数が説明文、第3引数に実行関数を追加します。
#include "Runtime/Core/Public/HAL/IConsoleManager.h"
AMyActor::AMyActor(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
if (!IsRunningCommandlet()) {
// コマンド登録(引数なし、ラムダ式)
IConsoleManager::Get().RegisterConsoleCommand(
TEXT("MyTestCmd1")
,TEXT("説明:テストコマンド引き数なし")
,FConsoleCommandDelegate::CreateLambda( [&](){ UE_LOG(LogTemp, Log, TEXT("MyTestCmd1!")); } )
,ECVF_Default
);
// コマンド登録(引数なし)
IConsoleManager::Get().RegisterConsoleCommand(
TEXT("MyTestCmd2")
,TEXT("説明:テストコマンド引き数なし")
,FConsoleCommandDelegate::CreateUFunction(this, TEXT("ExecCmd") )
,ECVF_Default
);
// コマンド登録(引数付き、ラムダ式)
IConsoleManager::Get().RegisterConsoleCommand(
TEXT("MyTestCmdArg1")
,TEXT("説明:テストコマンド引き数あり")
,FConsoleCommandWithArgsDelegate::CreateLambda( [&](const TArray<FString>& _Args){ UE_LOG(LogTemp, Log, TEXT("MyTestCmdArg1!:ArgNum=%d"), _Args.Num()); } )
,ECVF_Default
);
// コマンド登録(引数付き)
IConsoleManager::Get().RegisterConsoleCommand(
TEXT("MyTestCmdArg2")
,TEXT("説明:テストコマンド引き数あり")
,FConsoleCommandWithArgsDelegate::CreateUFunction(this, TEXT("ExecCmd2") )
,ECVF_Default
);
}
}
// 実行されるメソッド(引数なし)
void AMyActor::ExecCmd()
{
UE_LOG(LogTemp, Log, TEXT("ExecCmd"));
}
// 実行されるメソッド(引数付き)
void AMyActor::ExecCmd2(const TArray<FString>& _Args)
{
FString _Str = FString("Arg:");
for (int32 _Lp=0; _Lp<_Args.Num(); _Lp++)
{
_Str += _Args[_Lp] + ",";
}
UE_LOG(LogTemp, Log, TEXT("ExecCmd2 %s"), *_Str);
}
実行テスト
エディタのコマンドライン以外でのコンソールコマンド実行
BPでのコンソールコマンドの実行
ExecuteConsoleCommand
ノードで実行ができます。
C++でのコンソールコマンドの実行
プレイヤーコントローラーに対し、ConsoleCommand
で実行ができます。
以下コード例
// PlayerController に対して実行
_MyPlayerController->ConsoleCommand("MyTestCmd1");
// ワールドからプレイヤーコントローラーを取ってくる
GetWorld()->GetFirstPlayerController()->ConsoleCommand("MyTestCmd2");
コンソール変数
コンソール変数はコンソールマネージャ(IConsoleManager
)が持つ変数でエンジン全体に及ぶデータ型(int, float, string)を持つことができるようです。
この値を設定/取得することでコンソールコマンドのふるまいを変えるなどの使い方ができます。
以下はコマンドラインでの入力例です。
// コンソール変数 MyConsoleVar の値を出力する
MyConsoleVar
// コンソール変数 MyConsoleVar の値を10に設定する
MyConsoleVar 10
// コンソール変数 MyConsoleVar のヘルプを出力する
MyConsoleVar ?
自作コンソール変数の追加
数定義と登録1
TAutoConsoleVariable
型を staticで定義します。第1引数がコンソール変数名、第2引数が初期値、第3引数がコンソール変数の説明です。
static TAutoConsoleVariable<int32> CVarMyConsoleVar(
TEXT("MyConsoleVar"),
1,
TEXT("My Console Var Test."));
変数定義と登録2
関数にて登録をすることもできます。
#include "Runtime/Core/Public/HAL/IConsoleManager.h"
AMyActor::AMyActor(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
if (!IsRunningCommandlet()) {
// コンソール変数の登録
IConsoleManager::Get().RegisterConsoleVariable(TEXT("MyConsoleVar2"),
1.5f,
TEXT("My Console Var2 Test."));
}
}
登録の確認
変数の値も確認します、初期値が設定されているのが確認できます。
コンソール変数の取得
定義したコンソール変数を取得します。
以下コード例。
// TAutoConsoleVariable型定義から取得する
int32 _MyConsoleVar = CVarMyConsoleVar.GetValueOnGameThread();
// コンソールマネージャ経由で取得する
auto _CVar = IConsoleManager::Get().FindConsoleVariable(TEXT("MyConsoleVar2"));
float _MyConsoleVar2 = _CVar->GetFloat();
UE_LOG(LogTemp, Log, TEXT("MyConsoleVar=%d, MyConsoleVar2=%f"), _MyConsoleVar, _MyConsoleVar2);
まとめ
デフォルトで用意されているコンソールコマンド以外にも機能を追加できるため、デバッグが(たぶん)捗ります。
ただデフォルトで用意されているコンソールコマンド群がたくさんあるため使いこなせていないのですが。。
Author And Source
この問題について(UE4 コンソールコマンドとコンソール変数についてのメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/unknown_ds/items/5ebcb4e461f4a98eefc0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .