UE4/5 使用C++获取材质上的各种参数

此函数定义在一个函数库中,方便调用

函数声明:

/获取一个动态材质上的各个参数
	UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Material")
	static bool GetMaterialParameters(UMaterialInterface* MatInterface, TArray<FMaterialScalarParameter>& OutScalarParameters, TArray<FMaterialVectorParameter>& OutVectorParameters, TArray<FMaterialTextureParameter>& OutTextureParameters);

函数定义:

bool UCarCPPFunctionLibrary::GetMaterialParameters(UMaterialInterface* MatInterface, TArray<FMaterialScalarParameter>& OutScalarParameters, TArray<FMaterialVectorParameter>& OutVectorParameters, TArray<FMaterialTextureParameter>& OutTextureParameters)
{
	if (MatInterface)
	{
		TArray<FMaterialParameterInfo> ScalarParameters;
		TArray<FMaterialParameterInfo> VectorParameters;
		TArray<FMaterialParameterInfo> TextureParameters;
		TArray<FGuid> SGuids;
		TArray<FGuid> VGuids;
		TArray<FGuid> TGuids;
		MatInterface->GetAllScalarParameterInfo(ScalarParameters, SGuids);
		//UE_LOG(LogTemp, Warning, TEXT("%d"), ScalarParameters.Num());
		MatInterface->GetAllVectorParameterInfo(VectorParameters, VGuids);
		MatInterface->GetAllTextureParameterInfo(TextureParameters, TGuids);
		for (int32 ParameterIndex = 0; ParameterIndex < ScalarParameters.Num(); ParameterIndex++)
		{
			FHashedMaterialParameterInfo ParameterInfo(ScalarParameters[ParameterIndex]);
			FString SParameterName;
			float SParameterValue;
			SParameterName = ParameterInfo.GetName().ToString();
			FMaterialScalarParameter ScalarParameter;
			bool Result = MatInterface->GetScalarParameterValue(ParameterInfo, SParameterValue, true);
			ScalarParameter.ParameterName = SParameterName;
			ScalarParameter.ParameterValue = SParameterValue;
			if (Result)
			{
				OutScalarParameters.Add(ScalarParameter);
			}
		}
		for (int32 ParameterIndex = 0; ParameterIndex < VectorParameters.Num(); ParameterIndex++)
		{
			FHashedMaterialParameterInfo ParameterInfo(VectorParameters[ParameterIndex]);
			FLinearColor VParameterValue;
			FMaterialVectorParameter VectorParameter;
			bool Result = MatInterface->GetVectorParameterValue(ParameterInfo, VParameterValue, true);
			VectorParameter.ParameterName = ParameterInfo.GetName().ToString();
			VectorParameter.ParameterValue = VParameterValue;
			if (Result)
			{
				OutVectorParameters.Add(VectorParameter);
			}
		}
		for (int32 ParameterIndex = 0; ParameterIndex < TextureParameters.Num(); ParameterIndex++)
		{
			FMaterialParameterInfo ParameterInfo = TextureParameters[ParameterIndex];
			FHashedMaterialParameterInfo HParameterInfo = FHashedMaterialParameterInfo(ParameterInfo);
			UTexture* TParameterValue;
			FMaterialTextureParameter TextureParameter;
			bool Result = MatInterface->GetTextureParameterValue(HParameterInfo, TParameterValue, true);
			TextureParameter.ParameterName = HParameterInfo.GetName().ToString();
			if (Result) {
				TextureParameter.ParameterValue = TParameterValue->GetName();
				OutTextureParameters.Add(TextureParameter);
			}
		}
		return true;
	}
	return false;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值