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

この問題は単純で、 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