Torus Solutions 改

Ello 2020-05-26T05:43:42.642Z

#UE4 でゲーム実行中にコンソールから任意のアクタの Blueprint 関数を呼び出すには KE コマンドを使う。公式ドキュメントが見つけられなかったんだけど、ウェブ上で検索すると情報がたしょう見つかる。例えば:[UE4 Tips: Calling events from Console Shooter Tutorial](http://shootertutorial.com/2015/11/09/ue4-tips-calling-events-from-console/)。

このコマンドは次のような書式で書く:

ke <actor name> <function name> [<args> ...]

でこのアクタ名のところが少し厄介で、正しいアクタ名を指定したつもりでも内部的に曖昧さがあると思ったように実行されない。しかもコンソールをみると無言で失敗しているように見える。失敗したときにエラーなどを見たい時はログの饒舌さをあげるといいみたい。

log LogScriptCore Verbose

とすると、エラーがたくさんログファイルに出力される。(コンソールには出ない。)ちなみにエディタのログは Mac では次のパスに出力される:

~/Library/Logs/Unreal Engine/PlayLogicSampleEditor/PlayLogicSample.log

で、アクタの名前を調べて ke コマンドを実行したら次のようなエラーがでていた:

[2020.05.26-04.55.01:937][818]LogUObjectHash: Warning: Ambiguous path search, could be BP_Scenario_Island_C /Engine/Transient.World_0:PersistentLevel.BP_Scenario_Island_C_0 or BP_Scenario_Island_C /Game/Levels/Island/UEDPIE_0_Map_Island.Map_Island:PersistentLevel.BP_Scenario_Island_C_0

「xxx_C_0」のような名前を指定していても曖昧らしい。

アクタ名を指定する代わりに、アクタのクラス名を指定してもいい。その場合は、そのクラスのインスタンスの全てに対して関数が呼び出される。実行時の実際のクラス名は末尾に「_C」がくっついていることに注意する。たとえば BP_Scenario_Island というクラスのインスタンスに対して Blueprint 関数を呼ぶ時は次のようにする:

ke BP_Scenario_Island_C DumpState

アクタやクラスの名前を指定するのが面倒な時は * で代用してもいい。この場合は、シーン上の全てのアクタにたいして指定した名前の関数が呼ばれる。

また、このアクタ名のところには、実はコンポーネントのクラスも指定できる。したがって、シーンコンポーネントで関数を定義しておけば、コンソールコマンドで呼び出すことができる。

なお、エディタ上で実行している時は、下のようにマップエディタの右の World Outliner に現在存在しているアクタの一覧がでるので、そこにマウスカーソルを持っていくとアクタ名がわかる。