How to add Skeletal Mesh Sockets dynamically?

Hi,
I am trying to establish a pipeline for automatic socket creation on a Skeletal Mesh.

Here’s my code so far:

USkeletalMeshSocket * UHelperFunctions::DynamicCreateSkeletalMeshSocket(USkeletalMesh* SkelMesh, FName BoneName, FTransform RelativeTransform, FName SocketName)
    {
        USkeletalMeshSocket* NewSocket = NewObject<USkeletalMeshSocket>(SkelMeshAsset);
    	NewSocket->BoneName = BoneName;
    	NewSocket->RelativeLocation = RelativeTransform.GetLocation();
    	NewSocket->RelativeRotation = RelativeTransform.Rotator();
    	NewSocket->RelativeScale = RelativeTransform.GetScale3D();
    	NewSocket->SocketName = SocketName;
        return NewSocket;
    }

It seems to successfully create a socket, which is returned by the function, but does not show up in the respective SkeletalMesh asset.

Is there any way to achieve this?

Cheers,
Lena

Hello! Maybe this can help

Skeleton->Modify();

USkeletalMeshSocket* NewSocket = NewObject<USkeletalMeshSocket>(Skeleton);
check(NewSocket);

NewSocket->BoneName = InBoneName;
FString SocketName = NewSocket->BoneName.ToString() + LOCTEXT("SocketPostfix", "Socket").ToString();
NewSocket->SocketName = GenerateUniqueSocketName(*SocketName, nullptr);

Skeleton->Sockets.Add(NewSocket);
return NewSocket;
1 Like

Fantastic! Thank you so much