> 文章列表 > UE4中C++动态创建材质的几种方法Material

UE4中C++动态创建材质的几种方法Material

UE4中的C++动态创建材质,乍一看像是个技术活儿,但其实就是个“穿衣服”的游戏。你有一堆布料(材质),怎么给模型穿上呢?我们先来看看第一种方式:加载材质、创建实例、设置材质。这就像你先找了件衣服,然后根据身材调整,最后穿上。简单吧?但问题来了,如果衣服穿错了咋办?别慌,第二种方式直接加载材质并设置,省去了中间步骤,就像你直接套上现成的衣服,虽然少了个性化,但速度快啊!第三种方式则是结合前两种的优点,先加载材质,再动态创建实例,最后设置。这种操作适合那些需要频繁换装的场合,比如你今天想穿红的,明天想穿蓝的,轻松切换!

但问题来了,为什么我们要这么麻烦地动态创建材质?因为灵活性啊!想象一下,如果游戏中的角色需要根据天气、心情、场景实时换装,手动调整岂不是累死?动态材质就是你的救星!不仅如此,动态材质还能让你在运行时调整材质参数,比如让衣服随着时间变旧、变脏,增加游戏的沉浸感。所以,虽然看起来复杂,但动态创建材质实际上是提升游戏体验的利器。

最后,别忘了,无论是哪种方式,都要注意性能问题。如果频繁创建和销毁材质实例,可能会拖慢游戏帧率。所以,合理使用动态材质,让你的游戏既美观又流畅,才是王道!

UE4中C++动态创建材质的几种方法Material

第一种方式:

        1、首先加载材质,代码如下:

UMaterialInterface* Material = LoadObject<UMaterialInterface>(nullptr, TEXT("Material'/Game/Materials/ColorMaterial.ColorMaterial'"));

        2、然后调用CreateDynamicMaterialInstance创建静态材质实例,如下:

UMaterialInstance * DynamicMaterial = UKismetMaterialLibrary::CreateDynamicMaterialInstance(GetWorld(), Material);

        3、最后设置材质,如:

XXXXX->SetMaterial(0, DynamicMaterial);

第二种方式:

        首先加载材质,如:

static ConstructorHelpers::FObjectFinder<UMaterialInstance> MaterialObj(TEXT("/Game/Materials/ColorMaterial.ColorMaterial")); 

        // DynamicMaterial = MaterialObj.Object;//可以赋值保存下来

        直接设置材质,

XXXXX->SetMaterial(0, MaterialObj.Object);

第三种方式:

        首先加载材质,如:

static ConstructorHelpers::FObjectFinder<UMaterialInstance> MaterialObj(TEXT("/Game/Materials/ColorMaterial.ColorMaterial")); 

        然后使用CreateDynamicMaterialInstance创建材质实例,如:

UMaterialInstance * DynamicMaterial = UKismetMaterialLibrary::CreateDynamicMaterialInstance(GetWorld(), MaterialObj.Object);

        最后设置材质,给component设置材质实例,如:

XXXXX->SetMaterial(0, DynamicMaterial);

        如果多个材质进行切换,可以保存不同的实例进行动态切换材质

普通话学习