C++からのキャラクターアニメーションの再生について

TP_ThirdPerson のC++プロジェクト内のソースを読んでいて、キーボード操作で MoveForward() や MoveRight() 関数
が呼ばれる事でキャラクターが歩行する所まではわかるのですが。

歩行アニメーションやジャンプのアニメーションが再生されるコードは親クラスである ACharacter のJump関数が
呼ばれていたり、歩行のアニメーションについては移動速度によって自動で再生されているようです。

このあたりの制御はBlurPrintで行っている??

例えばパンチやキックするアニメーションを用意したとして、C++のコードで任意のタイミングでそれが再生される
様にしたい場合はどうやるのかがわかりません、、

リファレンス見てもイマイチイメージができないのですがどうすればいいのでしょうか?

よろしくお願いいたします。

ThierdPersonのアニメーション制御はselfashさんの推測の通り、AnimBlueprintで行われています。
"Game/Character/HeroTPP_AnimBlueprint"に処理が入っているので、これを見ればだいたいわかると思います。

パンチを行う処理はいくつか実装方法が考えられますが、サンプルに合わせるのであれば、次の方法かと思われます

  • Pawnのパラメータとして「今パンチした、もしくはしている」フラグをPawnに持たせる
  • AnimGraphのステートマシンにパンチStateを作成する
  • パンチStateへの遷移条件にPawnのフラグを使う

UE4のアニメーションシステムはAnimBlueprintのEventGraphとAnimGraph以外にもAnimMontageという機能もあるので、そちらで実装することも出来ますが、おそらく上の方法の方が分かりやすく楽ではないでしょうか。

素早い回答感謝します!

当方が目指しているのはSocket通信からKinectなどの外部のデバイスからの入力をトリガーにして
体験者のジェスチャーによってUE4内のキャラクターアニメーションが各再生されるというのを
目指しております。
UE4のビルドインのソケットライブラリの使い方はわかりませんでしたが、生のUDPソケットを立てて
通信する所まではなんとかできました。
が、肝心のC++コードからキャラクターアニメーションが再生する方法がわからなくて途方に暮れておりました、、

TP_ThirdPersonCharacter は ACharacter のさらに上のPawnを継承していたかと思いますので
TP_ThirdPersonCharacter内に下記のような感じでプロパティを持たせればいいのでしょうか。

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Character)
bool isPunching;

UPROPERTY使って宣言する事で AnimGraph 内にプロパティが表示されますよね、、
アドバイスいただいた通り、引き続きこのあたりを勉強してみます。
また何かつまづいた際に再度質問させていただきますので
引き続きよろしくお願いいたします!

はい、UPROPERTYでBlueprintReadOnly修飾子をつけるとBlueprintでも参照できるようになるので、それで良いかと~!

正確には、それだけだとAnimBlueprint(HeroTPP_AnimBlueprint)のプロパティとして現れるわけではなく、サンプルのようにTryGetPawnOwner得られるPawn(この場合TP_ThirdPersonCharacter)が取得できるので、そこから値を取得します。

Animation周りはちょっと入り組んでいるので、また分からなかったら質問するのが良いかと思います~。

お世話になっております。

アドバイス頂いた通り、
C++側でパンチやキックアニメーション用のフラグを立ててBlurPrint側でフラグの状態を読み取って
各アニメーションを切り替えて再生する所まではできました。

しかし、立てたフラグをアニメーションの終わりに元に戻したいのですが方法がわかりません、、
BluePrint内でアニメーションが終わったタイミングでフラグを元に戻すようにするには
どうすればよいのでしょうか?

フラグを戻せれば方法はC++でもBluePrintでもかまわないのですが、例えばアニメーション終わり
のイベント等を取得する事は可能なのでしょうか?

何度もお手数ですがよろしくお願いいたします。

詳しく説明すると長くなってしまうので、キーワードだけ残しておきますね。試してみてわからなかったらまた追加で質問ください。

ステートの遷移条件に「Time Remaining for ‘XXXX’」というのが使えます。アニメーションが終わったらステートを戻す、というのにはこれが便利です。(たしかThirdPersonテンプレートでも使っていた気がします)

また、別の方法でAnimNotifyというアニメーションにイベントを仕込む方法もありますが、その用途であれば上記の方法を推奨します。

また、こちらも要らないとは思いますが、一応ステートが終了するタイミングでイベントを取ることも可能です。ステートのプロパティの"EndTransition Event"->"Custom Blueprint Event"に任意の文字列を書いて、EventGraphで受け取れます。

お世話になっております。
度重なるアドバイスのおかげでキーボードを押したタイミングで任意のアニメーションが再生されて
フラグも元に戻す事ができました。ありがとうございました!

今、当社では下記のとおり3Dデザイナーと連携してUE4の検証・勉強を進めております。

http://labs.1-10.com/blog/unrealengine-demo.html

プログラマーの方でスマートフォンやキネクトなどの、外部デバイスと連携させたインスタレーションを作りたいと考えております。
現在取り組んでいるのは、キネクト + UE4 を組み合わせた格闘ゲーム風の
インスタレーションのプロトタイプなのですが、別スレッドでもご質問した通り
ソケット通信についてつまづいております。

[ソケット通信について]
https://answers.unrealengine.com/questions/34960/ソケット通信について-2.html

この時の質問後、Macの方ではC++コード内で生のUDPソケットを立てる
事でキネクトと通信させる事は出来ました。

ですが、デザイナーが使用しているWindowsマシンでだと

winsock2.h をインクルードした時点でUE4内のクラスファイルと競合してしまって

OS標準のソケットライブラリが使用できない状況です。

いろいろと調べた所UE4でソケットを使う方法は下記の3通りほどあるのかなと

1 C++コードでOS標準のソケットを使う

2 UE4のソケットモジュールを使う https://docs.unrealengine.com/latest/INT/API/RuntimeModules/Sockets/index.html

3 Plugins - UDP Messagingを使う

このうち2, 3についてアドバイスを頂きたいのですが。

2に関して、「ソケット通信について」で質問した通りすんなり使えませんでした、、

3に関して、ここでアドレスとポート番号を指定してあげればUDPソケットが受信可能な状態になる?

もしそうなった場合、受信したメッセージはBlurPrintか何かしらで取得する事が出来るのでしょうか??

長くなりましたが、スレ違いであればご指摘ください。
新規質問スレッドを立てるなり、「ソケット通信について」スレッドに移動する
なりしたいと思います。

何かヒントとなるキーワードでのアドバイスでもよいので何卒ご教授いただけると
幸いです。

すみません、ソケットを使う件、
2のUE4のソケットモジュールを使う事で自己完結しました。
お騒がせしました!!