天天看點

UE4 給static mesh 動态添加Socket

做個筆記

做項目遇到一個問題,就是需要給靜态模型 static mesh 動态添加 Socket,手動必須在編輯器下,打開模型編輯器視窗,如下右下角這裡添加

UE4 給static mesh 動态添加Socket

//目前隻有4.23 版本的代碼中含有Add Socket()函數,但是這個函數需要傳入一個空的Socket類型的索引,翻遍了藍圖也沒有相關的節點,隻能自己在插件裡建立了。

UE4源代碼 參考 位置

D:\Program Files\Epic Games\UE_4.23\Engine\Source\Editor\UnrealEd\Private\Fbx\FbxStaticMeshImport.cpp

2267行    到  2297行

UE4 給static mesh 動态添加Socket

下面是實作代碼 記得将xxx 換成你自己的藍圖類名

xxxBPLibrary.h裡

包含頭檔案

#include "Engine/StaticMeshSocket.h"    添加插槽

UE4 給static mesh 動态添加Socket

        UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject", DisplayName = "Create Socket", Keywords = " Static Mesh Socket"), Category = " Plugin")

        static UStaticMeshSocket* CreateSocket(UObject* WorldContextObject, UActorComponent * ActorComp, FName MySocketName, FTransform SocketTransform,FString MyTag);

xxxBPLibrary.cpp裡

UE4 給static mesh 動态添加Socket

UStaticMeshSocket* UxxxxxBPLibrary::CreateSocket( UObject * WorldContextObject, UActorComponent * ActorComp, FName MySocketName, FTransform SocketTransform, FString MyTag)

{

    class UStaticMeshSocket* MySocket ;

    UStaticMeshComponent* SourceMeshComp = Cast<UStaticMeshComponent>(ActorComp);

    UStaticMesh* MyStaticMesh = SourceMeshComp->GetStaticMesh();

    // If the socket didn't exist create a new one now

    MySocket = NewObject<UStaticMeshSocket>(MyStaticMesh);

    check(MySocket);

        MySocket->SocketName = MySocketName;

        MyStaticMesh->AddSocket(MySocket);

        MySocket->Tag = MyTag;

        MySocket->RelativeLocation = SocketTransform.GetLocation();

        MySocket->RelativeRotation = SocketTransform.GetRotation().Rotator();

        MySocket->RelativeScale = SocketTransform.GetScale3D();

        return MySocket;

}

繼續閱讀