UE4 给static mesh 动态添加Socket
https://blog.csdn.net/u011407338/article/details/103313608
做个笔记
做项目遇到一个问题,就是需要给静态模型 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行
下面是实现代码 记得将xxx 换成你自己的蓝图类名
xxxBPLibrary.h里
包含头文件
#include "Engine/StaticMeshSocket.h" 添加插槽
/* 在传入的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里
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;
}