第 20 天:动态材质(Material),让场景更生动!

发布于:2025-02-26 ⋅ 阅读:(18) ⋅ 点赞:(0)

🎯 目标:
✅ 理解 UE5 材质基础
✅ 学会在 C++ 中控制动态材质
✅ 制作透明特效,提升场景表现力


1️⃣ UE5 材质基础简介

Unreal Engine 5 的材质系统极其强大,允许你为场景中的物体添加各种视觉效果。

  • 静态材质:预先定义好属性,适用于大部分常规物体。
  • 动态材质实例(Dynamic Material Instance):在运行时修改材质属性,实现动画效果、颜色变换、透明度调整等。

在本节中,我们将重点介绍如何在 C++ 中创建并控制动态材质,从而实现透明特效。


2️⃣ 在 C++ 中创建动态材质实例

动态材质实例可以让你在游戏运行时动态修改材质属性。下面的示例代码展示了如何获取物体的材质、创建动态材质实例,并修改其透明度(Opacity)。

示例代码

// 假设这是在一个 Actor 类中
#include "YourActor.h"
#include "Materials/MaterialInstanceDynamic.h"
#include "Components/StaticMeshComponent.h"

void AYourActor::BeginPlay()
{
    Super::BeginPlay();

    // 获取静态网格组件
    UStaticMeshComponent* MeshComp = FindComponentByClass<UStaticMeshComponent>();
    if (MeshComp)
    {
        // 获取材质(假设索引为 0 的材质需要修改)
        UMaterialInterface* Material = MeshComp->GetMaterial(0);
        if (Material)
        {
            // 创建动态材质实例
            UMaterialInstanceDynamic* DynMaterial = UMaterialInstanceDynamic::Create(Material, this);
            if (DynMaterial)
            {
                // 将动态材质实例赋值给网格组件
                MeshComp->SetMaterial(0, DynMaterial);

                // 修改材质参数 - 调整透明度(Opacity)
                // 假设材质中有一个参数名为 "Opacity",取值范围为 0.0 ~ 1.0
                DynMaterial->SetScalarParameterValue("Opacity", 0.5f);
            }
        }
    }
}

说明:

  • 我们通过 FindComponentByClass<UStaticMeshComponent>() 获取物体的网格组件。
  • 通过 GetMaterial(0) 获取材质,并使用 UMaterialInstanceDynamic::Create() 创建动态材质实例。
  • 使用 SetScalarParameterValue() 修改材质中的参数(如透明度)。

3️⃣ 制作透明特效

利用动态材质,你可以控制材质的透明度,从而实现:

  • 淡入淡出效果:逐步改变透明度,创建渐变效果。
  • 交互反馈:当玩家接近时改变物体透明度,提示交互。
  • 特效动画:例如使物体缓慢消失或出现。

示例:淡出效果

你可以在 Tick() 函数中逐步降低材质透明度:

void AYourActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

    if (DynMaterial)
    {
        float CurrentOpacity;
        DynMaterial->GetScalarParameterValue("Opacity", CurrentOpacity);
        
        // 每秒减少透明度 0.2f,确保不小于 0.0
        float NewOpacity = FMath::Clamp(CurrentOpacity - 0.2f * DeltaTime, 0.0f, 1.0f);
        DynMaterial->SetScalarParameterValue("Opacity", NewOpacity);
    }
}

这样,你可以实现物体逐渐变得完全透明的效果。


4️⃣ 小贴士

  • 材质设置:确保材质使用了适当的混合模式(如 Translucent 或 Masked),以支持透明效果。
  • 参数名称:在代码中使用的参数名称必须与材质中设置的名称一致。
  • 性能考虑:动态材质实例在使用时会增加一定性能开销,适量使用即可。

🎯 总结

了解 UE5 材质系统,掌握静态材质与动态材质实例的区别
学会在 C++ 中创建并控制动态材质实例
利用动态材质实现透明特效,如淡出效果,提升场景表现力

🎮 通过本节学习,你可以为游戏中的物体添加动态视觉效果,使场景更加生动和富有变化!🚀