KBTIT_1
(KBTIT_)
1
プレイヤーがアイテムを拾うと、そのアイテムの物理演算を切って、プレイヤーの移動に併せて移動するという処理を実装しようとしています。
というわけで、おいしそうなItemをBPで用意ました。

これをステージに配置してプレイヤーにAttachToActorしたのですが、プレイヤーの動きに追従してくれません。
実行中のアウトライナーを確認すると、プレイヤーのアクタの下には移動しているのは間違いありません。
詳細を見ると物理演算も切られており、見た目のりんごのコンポーネントだけでなく、Itemアクタの座標が変化していないようです。
やりたいことは以下に書いてることの逆(追従してほしい)で、AttachToActorを使うことに問題はなさそうなのですが。
Unityは少し分かるので、Unityのように親子関係であれば、一緒に動く。という理解が間違っているのかと思い、以下の「複合オブジェクト」の項目を確認したのですが、
結局、親の移動に併せて子も動くだけじゃないの?と、この項目が何を言いたいのか理解できませんでした。
どの部分を直せば、この処理を実現できるでしょうか。
Unreal Engineのバージョンは5.0.3になります。
LunaNelis
(ネリスさんMain)
2
Actorの並び順をこのようにすることで解決するかと思われます。
作ったときにDefaultSceneRootとなっている場所にStaticMeshをドラッグ&ドロップで上書きして最上位をStaticMeshにできます。

ちなみに、親子関係はStatickMeshが上で、Boxが下でなければなりません。
大まかな理由ですが、子Componentが物理シミュレートを行うと、そのComponentが親から切り離されて動くため、アタッチできなくなってしまいます。
親子関係であれば一緒に動くという認識は合っています。
物理によってその親子関係が崩れてしまったために追従が行われなくなったと思ってもらえればと思います。(稀な例ではあります)
LunaNelis
(ネリスさんMain)
3
余談ですが、問題の本質は物理によってStaticMeshが親から離れてしまったことなので
親にStaticMeshをアタッチし、親子関係を再設定することでも解決します。
こちらの場合、StaticMeshを最上位の親にできない場合でも通用しますが
親のActorとStaticMeshで位置がズレるため
LocationRuleをSnaptoTargetにするなどの対処が必要になると思います。
KBTIT_1
(KBTIT_)
4
そのような親子関係にしたのですがプレイヤーに持たせる前に、アクタとしてステージに配置するだけで、
StaticMeshは移動しない(りんごが空中に浮いたまま)で、Boxだけが重力で落下してしまうのですが、何か親子関係以外の対応が必要になるのでしょうか。
LunaNelis
(ネリスさんMain)
5
StaticMeshに物理を付けて、Boxには必要ないのですが、どのように設定されていますか?
KBTIT_1
(KBTIT_)
6
StaticMeshはSimulate Physicsがfalseでグレーアウトされている状態です。
BoxがSimulate Physicsがtrueで、Enable GrabityがTrueになっています。
Simulate Physicsにマウスをあわせる、「StaticMeshに単純なコリジョンが設定されている必要が~」的なメッセージが出るので、StaticMeshがグレーアウトされているのは、これがされていないことが原因かもしれません。
ただ、一つのBPから複数の食べ物(StaticMesh)を切り替えられるようにしたいので、StaticMeshでSimulate Physicsを有効にして、食べ物(StaticMesh)ごとにSimulate Physicsが設定されている、ようなことは避けたいのですが。
LunaNelis
(ネリスさんMain)
7
まず、単純なコリジョンのないMeshというメッセージでわかる通り、コリジョンがないメッシュなのでしょう。
以下の画像のようにスタティックメッシュのコリジョンメニューから追加してみてください。
参考
他のメッシュで試してみるなどもしてみてください
2つ目に、BoxにSimulatePhysicsの設定は必要ありません
そして3つ目に、StaticMeshの切り替えはSetStaticMeshノードで後から差し替え可能です

KBTIT_1
(KBTIT_)
8
なるほど。ありがとうございます。
質問に質問を重ねてしまって申し訳ないのですが、
StaticMeshを切り替えるやり方について、複数のStaticMeshを持つオブジェクトと切り替えたい場合はどうすれば良いでしょうか。
例えば、「StaticMesh1つのりんごが1個」と「りんごとバナナが1個ずつ。それぞれのStaticMeshは別」と「StaticMesh1つのりんごが3個」いったケースです。
unityだと親に適当なオブジェクトを用意して、子にそれぞれ表示したいものを配置。あとは表示したい子だけアクティブにする。で良いのですが、
今回書いていただいたやり方のように、「まず親にStaticMeshがある」というものだと、どうすればいいものかと…
LunaNelis
(ネリスさんMain)
9
UEはUnityとは考え方が違うため、複数のものを置いてからコンテナにまとめるといったものを想定していません
UEであれば親が物理で動くものはそれぞれ独立しているべきなので、グループにまとめる理由も特にないかと思いますが。
もしどうしても複数の物理アセットがまとめて管理できていないといけない理由があるのであれば、それを明記してください。