UE EditToolBar插件

251 阅读1分钟

//添加头文件

#include "LevelEditorViewport.h"
#include "Engine/StaticMeshActor.h"

在 PluginButtonClicked()添加

void FTestToolBarModule::PluginButtonClicked()
{
	// Put your "OnButtonClicked" stuff here
	//通过当前编辑视图实例获取当前world
	UWorld* World = GCurrentLevelEditingViewportClient->GetWorld();
	if (World)
	{
		UE_LOG(LogTemp, Warning, TEXT("totalmass isaaaa"));
		//在视图中放置StaticMeshActor
		AStaticMeshActor* Actor = World->SpawnActor<AStaticMeshActor>(FVector(0, 0, 100), FRotator::ZeroRotator);
		//加载引擎Asset资源
		UStaticMesh* ConeMesh = LoadObject<UStaticMesh>(nullptr, TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube"));
		UMaterial* Mat = LoadObject<UMaterial>(nullptr, TEXT("/Game/StarterContent/Materials/M_Basic_Floor.M_Basic_Floor"), NULL, LOAD_None, NULL);
		//UStaticMesh* ConeMesh = LoadObject<UStaticMesh>(NULL, TEXT("/Game/StarterContent/Shapes.Shape_Cube"), NULL, LOAD_None, NULL);
		//UMaterial* Mat = LoadObject<UMaterial>(NULL, TEXT("/Game/StarterContent/Materials.M_Basic_Floor"), NULL, LOAD_None, NULL);

		UE_LOG(LogTemp, Warning, TEXT("totalmass is %f!"), ConeMesh);

		if (ConeMesh)
		{
			UE_LOG(LogTemp, Warning, TEXT("totalmass is bbbb"));
			//设置Mesh材质
			ConeMesh->SetMaterial(0, Mat);
			//设置MeshComponent的Mesh
			Actor->GetStaticMeshComponent()->SetStaticMesh(ConeMesh);
		}
		//刷新编辑中的视图,如果不加这行,则需要鼠标触发一下视图,视图才会刷新
		GEditor->RedrawLevelEditingViewports(true);
	}
	FText DialogText = FText::Format(
							LOCTEXT("PluginButtonDialogText", "Add code to {0} in {1} to override this button's actions"),
							FText::FromString(TEXT("FTestToolBarModule::PluginButtonClicked()")),
							FText::FromString(TEXT("TestToolBar.cpp"))
					   );
	FMessageDialog::Open(EAppMsgType::Ok, DialogText);
}

加载Class: 注意:_C

TSubclassOf<AActor> UnitSelector = LoadClass<AActor>(NULL, TEXT("Blueprint'/Game/MyProject/MyBlueprint.MyBlueprint_C'"));

TSubclassOf<AActor> UnitSelector = LoadClass<AActor>(NULL, TEXT("Game/MyProject/MyBlueprint"));