Copy static mehs sockets

This really annoyed me, so I came up with a blueprint library helper function, and a blutility to accomplish this.

The code for the function is:

void UTOTGameBPLibrary::ReplaceStaticMeshSockets(class UStaticMesh *Source, class UStaticMesh *Dest)
{
#if WITH_EDITOR
	if (Source != nullptr && Dest != nullptr && Source != Dest)
	{
		if (Source->Sockets.Num() > 0)
		{
			Dest->PreEditChange(NULL);
			Dest->Sockets.Empty();
			for (int32 i = 0; i < Source->Sockets.Num(); i++)
			{
				auto Sock = Source->Sockets[i];

				UStaticMeshSocket *NewSocket = NewObject<UStaticMeshSocket>(Dest);
				NewSocket->SocketName = Sock->SocketName;
				NewSocket->SetFlags(RF_Transactional);
				NewSocket->RelativeLocation = Sock->RelativeLocation;
				NewSocket->RelativeRotation = Sock->RelativeRotation;
				NewSocket->RelativeScale = Sock->RelativeScale;
				NewSocket->Tag = Sock->Tag;
				Dest->Sockets.Add(NewSocket);
			}
			Dest->PostEditChange();
			Dest->MarkPackageDirty();
		}
	}
#endif
}

and here is a screenshot of the Blutility:

5 Likes