C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

UE4 のコンソールにユーザー定義のコマンドを追加する方法

テンプレプロジェクトでは @ キーででてくる便利なコンソールにユーザー定義のコマンドを追加する例:

// MyActor.h
// ...
public:
  // コンソールから呼びたい UFUNCTION の宣言
  UFUNCTION( BlueprintCallable ) void hoge();
// ...
AMyActor::AMyActor()
{
  // ...
  
  if ( !IsRunningCommandlet() )
  {
    IConsoleManager::Get().RegisterConsoleCommand
    ( TEXT( "hoge" ) // <-- コマンド名
    , TEXT( "hoging to log." ) // <-- コマンドの説明
    // ↓コマンド本体; 今回は UFUNCTION の this の "hoge" を呼ぶ
    , FConsoleCommandDelegate::CreateUFunction( this, TEXT( "hoge" ) )
    , ECVF_Default
    );
  }
}

void AMyActor::hoge()
{
  UE_LOG( LogTemp, Log, TEXT( "hoge!" ) )
}

↓プレイ中の @hoge コマンドが使えるようになり、

f:id:USAGI-WRP:20170606140111p:plain

↓実行すると結果的に AMyActor::hoge() が実行されログに "hoge!" が出力される。

f:id:USAGI-WRP:20170606135931p:plain

コマンドとして登録するファンクター(相当)のそれは UFUNCTION を放り込む FConsoleCommandDelegate::CreateUFunction に限らず、 lambda expression を放り込む FConsoleCommandDelegate::CreateLambda なども使える。

IConsoleManager::Get().RegisterConsoleCommand
( TEXT( "hoge" )
, TEXT( "hoging to log." )
// ↓ラムダも放り込めて便利。
, FConsoleCommandDelegate::CreateLambda( [ & ] { hoge(); } )
, ECVF_Default
);

C++er的にはとても簡単にコンソールに"オレオレコマンド"を追加できるので開発が捗りますね。

参考