プレイヤーキャラクタだとソケット位置にアタッチできないのはなぜですか?

よろしくおねがいします
キャラクターの手に武器をもたせようと考えています.

ペルソナエディタから,手のボーンを指定してソケットを取り付けました.
BP(テストのためLevelBPです)上で[AttachActorToActor]を試しましたが,手のところにアタッチしません.

キャラクターのスケルタルメッシュやアニメーションシーケンスをレベルに配置し確認すると,
正しく手のところにアタッチしていますが,
キャラクターのBPでは手のところにアタッチされません.
そのことからもSocketNameの値は正しく,スケルタルメッシュとBPの違いだと思います.
BPキャラクターでも指定したソケットのところにアタッチさせる方法を教えて下さい.

また,
[AttachActorToComponent]も試してみました.
こちらはParentがコンポーネントタイプのため,キャラクターBPにアタリとしてシーンコンポーネントを追加,
詳細/ソケット/親ソケットの名前をペルソナで設定したソケットにすることで
希望する挙動になりました.
しかし,この方法では二度手間な気がします.
加えて,[AttachActorToComponent]のsocket Nameがデタラメでも希望通りの挙動をします.
正しい使い方ではないと思い質問しました.これが通常なのでしょうか?

質問タイトルとずれますが,ソケットの大きさは気にしなくてもいいのでしょうか?
ソケットサイズとプレビューメッシュサイズが連動している以外で意味を持たないような気がします.

この問題は単純で、 SocketにAttachするためにはその対象のComponentの直子でなければならない 、という決まりがあるためです

AttachActorToActor は字面からすると、ActorがActorにくっついているように思えますが、実際はTargetのRootComponentがParentActorのRootComponentにAttachされる、という形で解決されています

さて、ここで問題の キャラクターのスケルタルメッシュやアニメーションシーケンスをレベルに配置 したときに生成されるActorですが、これはSkeletalMeshActorといい、RootComponentがSkeletalMeshComponentになっています
この場合、SkeletalMeshComponent(Socketを持つComponent)の直子となるため、SkeletonのSocketにAttachするための条件が満たされます

対してCharacterですが、こいつのRootComponentはCapsuleComponentです
CapsuleComponentはSocketを持たないため、AttachActorToActorでSocketを指定しても想定通りにAttachできません
この場合でSocketにくっつけようとするなら、その下のMesh(SkeletalMeshComponent)に対してAttachActorToComponentをする必要があります

なお、Socket名が一致するものが見つからなかった場合、そのComponentのPivot位置にAttachされます
加えて,[AttachActorToComponent]のsocket Nameがデタラメでも希望通りの挙動をします. の原因はこれです
質問のパターンではSocketの位置にSceneComponentがあり、SceneComponentのある位置に対象がAttachされたため、正しい風になっているだけです


質問タイトルとずれますが,ソケットの大きさは気にしなくてもいいのでしょうか?

もちろん気にしましょう
Scaleを SnapToTarget にした場合、AttachしたComponentはSocketのScaleを継承するため、意図しない挙動を招きます

1 Like

詳細に理由や図解していただきありがとうございます!

試しに
Sceneコンポーネントの位置をMesh直下から,Capsuleコンポーネント直下に移動すると,
親ソケットの虫眼鏡マークが反応しなくなりました.

公式ドキュメントには(レベル上でのアタッチ説明ですが)

この方法は Skeletal Mesh アセットにアタッチする場合に限り機能し、Blueprinted アセット上にあるソケットにアタッチはできません。
とあり,具体的な理由の説明はありませんでした.
また,直後に書かれていたAttach Actor to Actorを試したのですが,
仕様は知りませんでした.

皆さんソースなどを読んで理解しているのでしょうか