【UE4】编辑器开发(七)模型导入与映射

一、导入模型

我们创建一个结构体,取名为FNewMesh,通过这个结构体导入模型和保存路径。所以,我们需要先在CustAsset中声明这个结构体并暴露给属性面板。

USTRUCT(BlueprintType)
struct FNewMesh
{
	GENERATED_BODY()
};

UCLASS(Blueprintable, BlueprintType)
class NEWASSETS_API UCustAsset : public UObject
{
	GENERATED_BODY()
public:
	UPROPERTY(EditAnywhere)
	FNewMesh NewMesh;
};

FNewMesh这个结构体需要具备导入模型的功能,所以我们就要修改这个结构体在属性面板中的样式,使其可以导入模型。
所以我们自定义这个结构体的属性样式。给这个结构体添加一个import按钮,通过单机按钮,打开模型导入弹窗并导入模型。

void CustomizeHeader(TSharedRef<IPropertyHandle> PropertyHandle, FDetailWidgetRow & HeaderRow, IPropertyTypeCustomizationUtils & CustomizationUtils)
{
	HeaderRow.NameContent()
	[
		SNew(STextBlock).Text(LOCTEXT("NewMesh", "New Mesh"))
	];
	HeaderRow.ValueContent()
	[
		SNew(SButton).OnClicked_Raw(this, &FPropertyType_NewMesh::OnImportButtonClicked)
		[
			SNew(STextBlock).Text(LOCTEXT("Import", "Import"))		//导入模型的按钮
		]
	];

}

FReply OnImportButtonClicked()
{
	FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools");
	AssetToolsModule.Get().ImportAssetsWithDialog("/Game");		//当点击导入按钮后,将会打开资源导入弹窗,然后选择模型后导入
	return FReply::Handled();
}

当然,除了上述代码,还要将FNewMesh的自定义属性类注册。
下面是完成后的的功能。
导入模型

二、将新导入的模型渲染在视窗中

FReply FMeshImportDetail::HandleImportClicked()
{
	FAssetToolsModule& AssetToolsModule = FModuleManager::Get().LoadModuleChecked<FAssetToolsModule>("AssetTools");
	AssetToolsModule.Get().ImportAssetsWithDialog(TEXT("/Game"));
	if(CustomAsset)
	{
		FString LastPaths = FEditorDirectories::Get().GetLastDirectory(ELastDirectory::GENERIC_IMPORT);
		FString L, R, S, K;
		LastPaths.Split(".", &L, &R);	//L= D://AssetProject/Content/xxx R= obj
		L.Split("AssetProject", &S, &K); //	K=  /Content/xxx

		UStaticMesh* ObjMesh = Cast<UStaticMesh>(StaticLoadObject(UObject::StaticClass(), NULL, *K));
		if(ObjMesh)
		{
			TArray<FVector> Vertices;
			TArray<int32> Triangles;
			TArray<FVector> Normals;
			TArray<FVector2D> UVs;
			TArray<FProcMeshTangent> Tangents;
			UKismetProceduralMeshLibrary::GetSectionFromStaticMesh(ObjMesh, 0, 0, Vertices, Triangles, Normals, UVs, Tangents);

			CustomAsset->ClearMesh();

			CustomAsset->Vertices = Vertices;
			CustomAsset->Triangles = Triangles;
		}
	}
	return FReply::Handled();
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值