UE4 创建动态材质实例 Asset

UE4 创建动态材质实例 Asset

Game状态下对应的动态材质实例是UMaterialInstance
Editor状态下对应的动态材质实例UMaterialInstanceConstant

因此UE4创建可编辑的动态材质实例Asset资源的话,需要创建UMaterialInstanceConstant。同时需要将"UnrealEd"模块添加到对应的xxxxx.Build.cs中。

Code示例

    FString PackageName = "/Game/Mesh/";
	PackageName += materialId;
	UPackage* Package = CreatePackage(NULL, *PackageName);

	UMaterialInstanceConstantFactoryNew* Factory = NewObject<UMaterialInstanceConstantFactoryNew>();

	UMaterialInstanceConstant* Instance = CastChecked<UMaterialInstanceConstant>(
		Factory->FactoryCreateNew(
			UMaterialInstanceConstant::StaticClass(),
			Package, *materialId, RF_Standalone | RF_Public, NULL, GWarn));

	//Set data
	if (IsHasCutoutMap(content))
		Instance->SetParentEditorOnly(pCutoutMaterial);
	else
		Instance->SetParentEditorOnly(pGlassMaterial);
	
	Instance->SetVectorParameterValueEditorOnly(TEXT("DiffuseColor"), baseColor);

	Instance->SetScalarParameterValueEditorOnly(TEXT("Transparency"), content.tp);

	Instance->SetScalarParameterValueEditorOnly(TEXT("Glossiness"), content.Glossness);
	//save asset
	Instance->MarkPackageDirty();
	Instance->PreEditChange(nullptr);
	FAssetRegistryModule::AssetCreated(Instance);
	Instance->PostEditChange();

Result

1

参考

  1. UE4 API 创建材质
  2. 动态创建UMaterialInstanceConstant Asset
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值