做个笔记

做项目遇到一个问题,就是需要给静态模型 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

/*   在传入的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;
    
}

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
  • 2021-06-07
  • 2021-05-29
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案