【UE4C++-ActionRougelike-07】游戏材质入门


【UE4C++-ActionRougelike-07】游戏材质入门

1、材质基础知识

主材质节点上的每个输入都将定义整个材质的特定属性,主材质节点每个输入具体用途见官方文档

材质编辑器

具体材质内容详见官方文档材质部分

2、实现受到攻击后的闪烁效果

2.1 创建材质

材质中设置游戏时间,当物体被Hit时,通过之后的C++代码将TimeToHit设置为当前时间,此时Time-TimeToHit==0;但Hit触发时需要物体发光,“自发光颜色”属性需要设置大于0,故通过1-x节点把0变为1。最后,由于材质内的Time节点会持续更新,导致减法的差值越来越大,使用Clamp限制其上下界为1和0。

闪烁效果

2.2 创建虚拟目标实现闪烁

创建MyTargetDummy.h类作为虚拟目标,添加MeshComp和属性组件用于处理被射击时进行闪烁效果。

class ACTIONROGUELIKE_API AMyTargetDummy : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AMyTargetDummy();

protected:
	UPROPERTY(VisibleAnywhere)
	UMyAttributeComponent* AttributeComp;

	UPROPERTY(VisibleAnywhere)
	UStaticMeshComponent* MeshComp;

	UFUNCTION()
	void OnHealthChanged(AActor* InstigatorActor, UMyAttributeComponent* OwningComp, float NewHealth, float Delta);
};

在MyTargetDummy.cpp中绑定被射击后的处理函数OnHealthChanged,并对函数进行定义,将TimeToHit设置为世界当前值。

AMyTargetDummy::AMyTargetDummy()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	MeshComp = CreateDefaultSubobject<UStaticMeshComponent>("MeshComp");
	RootComponent = MeshComp;

	AttributeComp = CreateDefaultSubobject<UMyAttributeComponent>("AttributeComp");
	AttributeComp->OnHealthChange.AddDynamic(this, &AMyTargetDummy::OnHealthChanged);
}


void AMyTargetDummy::OnHealthChanged(AActor* InstigatorActor, UMyAttributeComponent* OwningComp, float NewHealth, float Delta)
{
	if (Delta < 0.0f) 
	{
		MeshComp->SetScalarParameterValueOnMaterials("TimeToHit", GetWorld()->TimeSeconds);
	}
}

3、溶解效果

溶解效果

4、材质函数

通过创建材质函数可以复用代码,下面以闪烁效果为例

4.1 创建材质函数

创建闪烁效果材质函数MF_HitFlashDemo,需要Expose to library暴露给库

材质函数

4.2 使用材质函数

在材质编辑器中使用材质函数

使用材质函数

最终效果示意图如下:

效果图

5、UMG中的材质

5.1 新建血量条材质

新建材质M_HealthBar,修改Material Domain为User Interface

UI界面材质

通过LinearGradient实现血量条UI材质

血量UI材质

5.2 添加血量条材质到UMG

修改UMG,创建Image,设置材质为M_HealthBar

UMG界面

血量变化委托触发时修改M_HealthBar的ProgressAlpha参数实现血量条的变化

绑定血量条UI材质变换

文章作者: Woilin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Woilin !
评论
  目录