本笔记的记录了骨骼模型Socket的用法。入门示例成品。
插槽(Socket)
选中要创建插槽(Socket)的骨骼,右键选择“添加插槽”。新建的插槽命名为“RightHandSocket”。
右键选中Socket,给它添加一个参考模型来调节Socket位置和旋转。调节Socket的旋转和位置,使其能够挂上武器而且和手的位置正好和手型吻合。
代码使用Socket
根据名称可以获取USkeletalMeshComponent上的某个Socket,代码如下。
const USkeletalMeshSocket* RightHandSocket = GetMesh()->GetSocketByName(TEXT("RightHandSocket"));
Socket上可以挂载某个AActor,代码如下。
// RightHandSocket为要挂载物件的挂点Socket
// weapon为要挂载到Socket上的AActor
// GetMesh()为RightHandSocket所属的USkeletalMeshComponent
RightHandSocket->AttachActor(weapon, GetMesh());
从Socket上卸载某个AActor,不能调用Socket的接口来卸载,因为Socket没有这样的方法。需要到AActor里面调用自己的DetachFromActor函数才行。
// this指的使weapon自己
this->DetachFromActor(FDetachmentTransformRules::KeepWorldTransform);