アクターにアタッチしたアクターがズレていく原因


UEにてアーマードコアのようなメカカスタマイズアクションゲームを作成しています。
Playerのアクターは胴体、頭、右手、左手、足のスケルタルメッシュのコンポーネントを有しており、それらのアニメーションはマスターポーズコンポーネントで処理しています。
Playerのアクターに変数として武器のアクターを持たせています。そして、その武器のアクターをPlayerのボーンにアタッチしています。
この際、アタッチ先のボーンは右腕や左腕といったスケルタルメッシュコンポーネントのボーンです。
この状態でゲームを開始すると、時間とともにアタッチした武器達の座標がどんどんズレていきます。
しかし、同じ方法でスラスターのアクターもアタッチしているのですが、そちらにズレは確認できませんでした。
有識者の方々、何卒よろしくお願いいたします。

気になるところとしては、LeaderComponentがどの部分で、スラスターはどの部分にAttachされているか、ですね
武器は腕についているそうですが、腕はFollowerでしょうか?
仕組み上Leaderが先に動き、Followerがそれをコピーし、その後でAttachされた武器が動く、という形になるので、それらが同一フレームでかつ正しい順番で処理されていない限り、ズレる可能性があるように思います

支障がなければ、一度Leader側に武器をAttachしてみるのはどうでしょうか?

コメントありがとうございます!
LeaderComponentは体全体(頭、胴体、腕、足を全て持つ)を持つボーンです。
スラスター、武器ともにFollowerにアタッチされています。

Leaderへのアタッチはできれば避けたいですね…
メカカスタマイズゲームという特性上、アタッチする箇所がそれぞれスケルタルメッシュ(胴体、腕、足)によって異なるからです。

他に考えられることとしては…武器のCollisionはAttach時にOFFにしていますか?
CollisionをONにしたまま持ち物をAttachすると、干渉する場合があります

はい、OFFにしています。
また、分かったことなのですが、動いているアニメーション、例えば待機時の呼吸を表現したアニメーションなどの時のみズレが発生するようです。
他の静止状態のアニメーションの時はズレませんでした。

ちなみにですが、ActorをAttachしているBoneは手の先にありますか?
それとも独立したAttach用のBoneを用意していますか?

その呼吸表現のAnimを加算で表現している場合、対象のBoneがスケルトン構造の先にないと、その部分の加算がされないです

一般的なケースに関しては大体確認したので、これ以上に関してはより詳細な情報がないと回答は難しいかと思います

手の先(Handのボーン)にアタッチしており、専用のボーンは用意していません。

とりあえず、デタッチとアタッチをTickで繰り返すことで事なきを得ましたが、根本的解決には至っていません…

もしかして自分で骨を並べて動かしてるせいで少しずと誤差ができてズレていくとかですかね?

もしかしたら↓この辺りを読むと良い方法が見付かるかもしれません。

私はレンダリングの負荷を下げたかったのでメッシュのマージをしました。ドキュメントには頑張ればモーフターゲットをどうにかできそうな話がありましたが、私にはどうにもできず、結局ブループリントだけを使ってマージしました。

もしかして全然違う話になっちゃってたらごめんなさい。

追記
すみません。

>マスターポーズコンポーネントで処理しています。

ってあるのに。大変失礼しました。忘れて下さい。

追記の追記
更にちゃんと読んだら待機時などのアニメーションの時に武器がズレていくとのことで完全に頓珍漢なレスをしてしまったことに漸く気付きました。

頓珍漢なレスをしたお詫びに自分がどうやってたのか調べてみたので書いておきます。
私はマージメッシュなので骨が一つに纏められるというのはあるんですが、折角マージしてる割には武器を持つためのチャイルドアクタコンポーネントが別に定義されてて、武器はそのチャイルドアクタコンポーネントのSetChildActorClassで持ち替えやってました。なんでわざわざそんな真似をしたのか全然思い出せません。ただ、骨とソケットとチャイルドアクタコンポーネントが離れることはないわけで、もしかしたら安定するかも??武器はそれぞれ武器用のアクタにしてトランスホームは武器のサイズなどに合わせてBP内で予め定義しちゃってるので、武器持ち替え時に数値を気にすることはありません。余分なチャイルドアクタコンポーネントを抱えてると、その分ドローコールが増えるんでしょうから自分は嫌いそうなやり方なのに、どうしてそうしたのか、ほんと謎ですが。ってか、もしも既にチャイルドアクターコンポーネントを使ってるのならまたあれですが、なんかいろいろご迷惑おかけしました。

(post deleted by author)

コメントありがとうございます!!
チャイルドアクターで試してみましたが、やはりズレてしましました。
ご提案してくださってありがとうございます。

余計な手間だけ取らせてしまったようですみません。
それにまだ出鱈目言っちゃってたみたいです。
チャイルドアクターコンポーネント自体はドローされないのだから定義してもドローコールは増えないはず?
しかしそれよりも、チャイルドアクターコンポーネントを使ってズレがなくなるようなら、それはそれで問題の気がするし。頓珍漢なことばかり言ってしまいました。

スラスターはズレないという話ですから、そこに武器をつけてみてもズレないんですかね?
アニメーション&ボーン&ソケットの問題なのか、マスターポーズコンポーネントの問題なのか。前者ならアニメーションが破綻してくれそうな気もするんですが。すみません見当がつかないです。

解決しました!!
どうやら武器のアクターのProjectile Movementが原因だったようです。
Projectile Movementは武器をパージした時に使用していたのですが、Projectile Movementがアクティブな時点で悪さをしていたようです。
ですので、通常時はProjectile MovementをDeactiveにし、武器をパージした際にだけActiveにすることで解決しました!!
皆さま本当にありがとうございました。