昨日中途半端になっていた、c++で書いたapiの処理のresponseのコールバックをBlueprint側で呼び出す処理ができるようになりました。
やり方は、CallFunctionByNameWithArgumentsを使って、bluerpintの関数を呼び出すことで解決しました。
CallFunctionByNameWithArgumentsを使うと、
ue独自のリフレクション機能が働いて、blueprintで定義した関数を呼び出してくれるようです。
その関数のことをue4 answer hubで知ったんですが、そこでは引数なしのblueprint関数を呼んでいて、自分は引数ありの関数を呼びたかったので、
調べてみると以下のように引数のcmdに文字列コマンドを受け渡すことでいけました。
int rank = 10;
FOutputDeviceNull ar;
const FString funcCommand = "returnAddRankingResponse " + FString::FromInt(rank);
this->CallFunctionByNameWithArguments(*funcCommand, ar, NULL, true);
returnAddRankingResponseというのは、関数名で、rankというのがint型の引数になっています。
bluerprintで関数を定義する場合は、名前をreturnAddRankingResponseにして、
引数として、int型を定義してあげてください。
すると、定義したintの引数に10が代入されるはずです。
ところで、CallFunctionByNameWithArgumentsの関数説明見たんですけど、ほぼ意味ないっすね。引数の説明がない。
意味がある点といえば、引数となっているオブジェクトにリンクが貼ってあることくらいですね。
自分で関数の中身を見て解析しないといけません、難解なc++のソースを。。。
話は変わりますが、その他には永続データのセーブ処理などをやってました。
以前やったのに忘れていて、うまくいかずに四苦八苦して、時間をかなり潰してしまいました。
これじゃ、sqliteで書いた方が早いっすわ。
最近は、進み具合が遅くて、嫌になることが多い。
セミのように脇目も振らず、自分の思うことだけに集中して生きたいっすね。
c++からblueprintを呼ぶ方法については、そのうちgamecorderに書きたいと思います。
2018/6/7