いつもお世話になっています。
レベルBP上で使用できるRemoteEventの様に、関数名を引数に関数を実行できるノードはありますか?
指定した関数名を参照する場所はレベルBPとファンクションライブラリーとなります。
C++も試したのですが、、、わかりませんでした。
よろしくお願いいたします。
いつもお世話になっています。
レベルBP上で使用できるRemoteEventの様に、関数名を引数に関数を実行できるノードはありますか?
指定した関数名を参照する場所はレベルBPとファンクションライブラリーとなります。
C++も試したのですが、、、わかりませんでした。
よろしくお願いいたします。
C++でKismetSystemLibraryのK2_SetTimer(BPノードでいう SetTimerByFunctionName
)辺りを調べれば参考になるのでは、と思います
ただ、FunctionLibraryの関数はStatic関数のようなもので、ObjectのInstanceがないためこの関数と同じ方法でUFunctionが取り出せるかはわかりません
参考になれば幸いです
以下蛇足です
個人的にはそういう呼び方をしようと考えるのはオススメしません
ヒューマンエラーの原因にしかならないですし、参照が付かなくなるのでその関数がどこから呼ばれているかを手作業で管理せざるを得なくなるためです
(RemoteEventはSubLevel間の問題に限定されるため、手作業でもなんとかなるとは思いますが…)
コメントいただき、ありがとうございます。
SetTimerByFunctionNameを試したのですが、レベル内の関数は実行できて、
FinctionLibraryの中にある関数が実行できなかったです。objectに何か指定しないと
ダメなんでしょうか?
まだUE4本格的に触り始めて間もなく、変な事言っていたらすみません。
また蛇足とはありましたが、大変参考になりました。ありがとうございます。
プロジェクトの規模が個人で完結するので現時点では問題ないですが、
この方法がポピュラーでないのが分かりましたので。この方法は避けるようにしたいと思います。
ちなみになんですが、レベルBP内のイベントノードから関数を実行したい場合は
カスタムイベントや関数を直接指定する方法が一般的ということでしょうか?
質問ばかりですみません。
どうぞよろしくお願いいたします。
SetTimerByFunctionNameを試したのですが、レベル内の関数は実行できて、 FinctionLibraryの中にある関数が実行できなかったです。objectに何か指定しないと ダメなんでしょうか?
ダメです
画像のような場合、Objectに何も入れなければ暗黙的に Self
が入ります
FunctionLibraryの関数を呼びたければ、カスタムイベントか関数でラップする必要がありますね
ちなみになんですが、レベルBP内のイベントノードから関数を実行したい場合は カスタムイベントや関数を直接指定する方法が一般的ということでしょうか?
LevelBPに限らず、基本的にすべてのBPにおいて関数ノードを配置することによって関数処理を実行します
このあたりの取り扱いは他のプログラム言語と同じです
他の言語でもReflectionの仕組みはあっても、Reflectionを優先して使う、ということはしないですよね?
ご教示いただきありがとうございます。
レベルBP上での関数の扱いについて理解いたしました。
仰る通り、Reflectionの仕組みを優先して使うという事はしません。
ただ少し特殊な環境下での使用を考えており、
同一PC上でUE4と違うリアルタイム系CGソフトウェアAを同時に起動、
キーアサインもしくは何等かのイベントをキックする事でUE4とリアル
タイム系ソフトAを制御(目的の振る舞いをさせたい)できればと考えています。
現在、基本的につくり込みをリアルタイム系ソフトAで行っており、
UE4上での手間や管理コストを少しでも抑えるためにこの仕組みを使用する予定でした。
リアルタイム系ソフトAの仕組みやキーアサイン管理方法をUE4でも踏襲するしようと
考えていましたが、すこし考えを改めます。
この度は質問にお答えいただき、ありがとうございました。
リアルタイム系ソフトA
とぼかされているのでどのような形が可能なのかはわかりませんが
他のソフトとの連携ができればいい、ということならTCPやプロセス間通信の仕組みを持つActorをC++で作成し、EventDispatcher(MulticastDelegate)を通じて任意のイベントを呼ぶ、という方法で実現できそうな気がします
例えばEventDispatcherのParameterにFStringでイベントの種類を持ってくるようにして、それをSwitchOnStringで振り分ける形を取れば、比較的自由にイベントを呼ぶことができるはずです
ご返信いただきありがとうございます。
データの疎通はできているのでご提案頂いた方法も試してみたいと思います。
EventDispatcher触った事が無かったです。初めて知りました。ありがとうございます。
しかし、ご指摘頂きましたとおり、ポピュラーな方法でない事とシーンの透明性を確保できないことからもう少しわかりやすい方法にシフトしたいと思います。
ご教示いただき、ありがとうございます。
差し支えなければ、またご教示いただけますと幸いです。