做個筆記
做項目遇到一個問題,就是需要給靜态模型 static mesh 動态添加 Socket,手動必須在編輯器下,打開模型編輯器視窗,如下右下角這裡添加
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0zZ61kejRUTwUEVNdXVzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuEjNxUzMxcTM5ITMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
//目前隻有4.23 版本的代碼中含有Add Socket()函數,但是這個函數需要傳入一個空的Socket類型的索引,翻遍了藍圖也沒有相關的節點,隻能自己在插件裡建立了。
UE4源代碼 參考 位置
D:\Program Files\Epic Games\UE_4.23\Engine\Source\Editor\UnrealEd\Private\Fbx\FbxStaticMeshImport.cpp
2267行 到 2297行
下面是實作代碼 記得将xxx 換成你自己的藍圖類名
xxxBPLibrary.h裡
包含頭檔案
#include "Engine/StaticMeshSocket.h" 添加插槽
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裡
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;
}