knakagawa
(knakagawa)
1
やりたいことは、skeletal meshのボーンのトランスフォームを順次変更することです。
その際、たとえば、
・Name型のArray変数"myBoneNames":変更したいボーンの名前が入っている
・Transform型のArray変数"myBoneTransforms":変更したいボーンのトランスフォーム値が入っている
という変数があり、それぞれのindexで対応しているとします。
私の認識では、skeletal meshのボーンのトランスフォームをBPから直接変更するためには、アニムグラフの「ボーンをトランスフォーム(修正)する」というノードを用いなければなりません(正しい認識でしょうか?)。
このノードを使用するにあたり、問題が2つあります。
1.アニムグラフには実行ピンがなく、ForEachLoop等が使えないため、Arrayを順次処理できない。
2.「ボーンをトランスフォーム(修正)する」のボーン名は入力ピンになっておらず、Name型の変数を刺すことができない。
これらの問題のため、Array変数を使うことができず、ひとつひとつのノードを手作業でつなげていかなければならないとなると、大変な手間になってしまいますし、何より全く汎用性がありません。良い方法はないでしょうか?
可能性があるとすれば、C++で上記2つの配列変数をinputに持った独自ノードを作るしかないのだろうかと推測しますが、これは悪くない考え方でしょうか?(C++に不慣れなので、できるかどうかはわかっていません。)
ユースケースがよくわからないのですが、どういった目的でしょうか?
knakagawa
(knakagawa)
3
目的1
たとえば、肩ボーンを回転させるとき、ある角度以上になると自動で鎖骨も回転補正するという仕組みを作りたいとします。アニムグラフで
肩ボーンの角度から鎖骨の補正角度を計算 → (鎖骨ボーンの角度 + 補正角度)をinputにして、鎖骨の『ボーンをトランスフォーム(修正)する』
という流れを組みました。
この補正を、任意の複数モデルに対して行うには、すべてのモデルに対してアニムBPを作って、上記補正を組まなければなりません(スケルトン構造を統一できればよかったのですが、今回はそれができない場合です)。
そして、鎖骨と同様に、肘、膝、首、胸、様々な部分を補正する仕組みを作りたいとします。モデルによっては、この補正ボーンの数は20や30、あるいはそれ以上になります。これを手作業で行うには、誤りが起きそうですし、手間がかかります。
そこで、変数配列か、またはデータテーブルなどを介した外部ファイルを編集し、それをもとに一括でループさせて補正させたいと考えました。
「補正する骨の名前」の変数配列が外部にあれば、アニムBPは一つで済むし、アニムグラフを手作業で組む必要もなくなるからです。
目的2
または、同じskeletal meshを持つ、skeletal mesh コンポーネントと、poseable meshコンポーネントがあり、poseable meshコンポーネントのポーズをskeletal meshコンポーネントにコピーしたいとき、同様にループできれば簡単に実現できると考えました。
poseable meshからボーン名一覧の配列は容易に取得できるからです。
alwei
(alwei)
4
不可能です。
まずは以下のスライドをよく読んでいただき、ボーンの構造を共有化するようにしてください。
猫でも分かる UE4のAnimation Blueprintの運用について
ループを行わせたいのであれば、イベントグラフ上で行うようにし、アニムグラフはあくまでも設定用と考えてください。基本構造さえ共通にしてしまえば同じアニメーションブループリントが利用できますし、一部分だけ共通化したいのであれば、Sub Anim Instanceを使えば部分的に共通化することも可能です。
knakagawa
(knakagawa)
5
ありがとうございます。alweiさんのブログは、いつも非常に参考にさせていただいています。
残念ですがループ処理が行えないのであれば、ボーン構造の共有化ができないケースでは、都度専用のアニメーションBPを作る必要がありそうですね。
また、ボーン構造を共有できるケースにおいても、そのアニメーションBPを構築する際には、『ループを用いたトランスフォームの修正』は行えないので、ボーンの数だけアニムグラフで「ボーンをトランスフォーム(修正)する」ノードを作り、マウスで1つ1つつなげていかなければならないのですね。
(poseable meshの「setBoneTransformByName」のように「イベントグラフ上でトランスフォームの修正が行える」かつ「ボーン名のinputがピンになっている」のであれば、ループが使えて非常に簡潔に組めるのに、という気持ちが拭えません。skeletalとposeableでは用途が違うからと納得するしかないのでしょうが…。)