関連ブログ
- [UE5] Soundscapeプラグインを使ってみる 2024.11.13UE
- [UE5] Batch Renamerを使って一括でアセット名をリネームしよう! 2024.11.06UE
- [UE5]ライトプローブを使ってクローズアップショットをつくってみよう 2024.10.30UE
CATEGORY
2022.08.17UE5UE/ C++UE/ Debug
執筆バージョン: Unreal Engine 5.0 |
皆さんこんにちは、エンジニアの森です
コンソールコマンドは、エディターでもランタイムでも気軽に呼び出せる便利な存在で、よくデバッグ時などに重宝されます
今回は FAutoConsoleCommand を使って簡単にコンソールコマンドを追加する方法を紹介します
過去記事では、CheatManagerを使ってコンソールコマンドを追加する方法を取り上げているので、そちらも参考にしてください
コンソールコマンドを追加するので、よく使うコマンド一覧でも紹介している DumpConsoleCommands を試してみるのも良いと思います
以下のソースコードを適当な場所に貼り付けて、コンパイルするとコンソールコマンドが追加されます
1 2 3 4 5 6 7 8 9 10 |
#include "HAL/IConsoleManager.h" static FAutoConsoleCommand TestCommand = FAutoConsoleCommand( TEXT("Test.Command"), // 名前 TEXT("Say Hello\nSay Hello(2)\nSay Hello(3)"), // 説明文 FConsoleCommandDelegate::CreateLambda([]() // 実行されたときの処理 { UE_LOG(LogTemp, Log, TEXT("Helo")); }) ); |
この方法は以前の記事と比べると手順が少ないのがメリットです
自作したコマンドの呼び出しをするときには、FAutoConsoleCommand のコンストラクターで指定したコマンド名をコンソールで入力します
説明文の中に改行文字がある場合、コマンド名の後ろに「?」を渡すことで 2 行目以降の説明文が出力されます
コマンドを引数付きにしたい場合は、FConsoleCommandDelegate ではなく FConsoleCommandWithArgsDelegate を使用します
ただし、引数はコンソールに入力した内容が空白で区切られた結果の文字列配列として渡されるので、その解釈は自分で行う必要があります
使用するデリゲートによって、UWorld と FOutputDevice が渡されるものがあるので、以下の表にまとめます
必要に応じて使い分けてください
使用するクラス | 使用するデリゲート | 引数 |
FAutoConsoleCommand | FConsoleCommandDelegate | なし |
FAutoConsoleCommand | FConsoleCommandWithArgsDelegate | const TArray |
FAutoConsoleCommand | FConsoleCommandWithWorldArgsAndOutputDeviceDelegate | const TArray |
FAutoConsoleCommandWithWorld | FConsoleCommandWithWorldDelegate | UWorld* |
FAutoConsoleCommandWithWorldAndArgs | FConsoleCommandWithWorldAndArgsDelegate | const TArray |
FAutoConsoleCommandWithOutputDevice | FConsoleCommandWithOutputDeviceDelegate | FOutputDevice& |
また、コマンド追加はランタイムでも可能です
その場合は先ほどのソースコードを好きな箇所に貼り付けて使用することになります
ただし、変数の寿命が尽きると同時にコマンドも削除される点を意識してください
FAutoConsoleCommand のコンストラクタのソースコードを見ると、以下のコマンド登録関数 IConsoleManager::RegisterConsoleCommandを使用していることが分かります
1 |
IConsoleManager::Get().RegisterConsoleCommand(); |
親クラスである FAutoConsoleObject のデストラクタには、登録解除の関数 IConsoleManager::UnregisterConsoleObjectが記述されています
というわけで、今回は FAutoConsoleCommand の紹介でした
ありがとうございました