UE4中C++动态创建材质的几种方法Material
UE4中的C++动态创建材质,乍一看像是个技术活儿,但其实就是个“穿衣服”的游戏。你有一堆布料(材质),怎么给模型穿上呢?我们先来看看第一种方式:加载材质、创建实例、设置材质。这就像你先找了件衣服,然后根据身材调整,最后穿上。简单吧?但问题来了,如果衣服穿错了咋办?别慌,第二种方式直接加载材质并设置,省去了中间步骤,就像你直接套上现成的衣服,虽然少了个性化,但速度快啊!第三种方式则是结合前两种的优点,先加载材质,再动态创建实例,最后设置。这种操作适合那些需要频繁换装的场合,比如你今天想穿红的,明天想穿蓝的,轻松切换!
但问题来了,为什么我们要这么麻烦地动态创建材质?因为灵活性啊!想象一下,如果游戏中的角色需要根据天气、心情、场景实时换装,手动调整岂不是累死?动态材质就是你的救星!不仅如此,动态材质还能让你在运行时调整材质参数,比如让衣服随着时间变旧、变脏,增加游戏的沉浸感。所以,虽然看起来复杂,但动态创建材质实际上是提升游戏体验的利器。
最后,别忘了,无论是哪种方式,都要注意性能问题。如果频繁创建和销毁材质实例,可能会拖慢游戏帧率。所以,合理使用动态材质,让你的游戏既美观又流畅,才是王道!
第一种方式:
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);
如果多个材质进行切换,可以保存不同的实例进行动态切换材质