斯坦福UE4 + C++课程学习记录 17:材质-材质函数

目录

1. 创建材质函数

2. UI材质


        在第15节的内容中,我们使用了DebugScalarValue函数将数字显示在材质上,在这一节我们将尝试编写和使用材质函数(Material Function)。

1. 创建材质函数

        首先,在Material文件夹下右键 -> 材质和纹理 -> 材质函数,命名为MF_HitFlashDemo,我们将把受击闪烁的功能封装成函数以便重用。打开MF_HitFlashDemo,并将M_HitFlashDemo(第16节实现的材质)控制“自发光颜色”的部分蓝图复制粘贴到其中,连上“OutputResult”左边的引脚。

图17-1 材质函数设置

         然后,勾选材质函数的“公开到库”选项,这样才能在其他材质中使用。保存后回到M_HitFlashDemo中,右键添加MF_HitFlashDemo节点(注意项目自带了一个MF_HitFlash函数,名字很像不要混淆)。接下来就可以把节点连到“自发光颜色”,并删除之前的一大堆节点。

图17-2 添加节点
图17-3 运行测试

        保存后运行测试,可以发现效果和之前一模一样。因此,将常用材质效果封装为材质函数后,就可以十分方便地将其应用到后续的任何材质中。

        进一步,我们还可以为材质函数添加输入。双击材质函数节点,可以直接跳转到材质函数的蓝图中。在TimeToHit节点后新增一个FunctionInput节点,勾选其“将预览值用作默认值”。这样在其它场景调用这个函数时,就可以根据不同的场景选择输入。

图17-4 添加输入
图17-5 带有默认输入

2. UI材质

        现在我们将要创建一个材质,并应用掉之前实现的血量条UI上。首先,创建一个新材质M_HealthBar,将材质的材质域从默认的“表面”切换为“用户界面”,并添加如下节点:

图17-6 HealthBar蓝图

        以上节点实现的功能是,根据一个0~1值来控制血条红色与白色的比例,刚好这个0~1值与之前实现血量条计算百分比的逻辑相符。LinearGradient恰如其名,输出的是一系列固定的0~1线性变化的值,ProgressAlpha参数则作为控制显示红白色的阈值,实现控制的方式就是后面的If节点。默认下ProgressAlpha值为1,表示满血状态。

        进入血条控件PlayerHealth_Widget,删除之前的ProgressBar,然后使用一个Image替代,这个Image的“外观” -> “图像”就设置为M_HealthBar。因为删除了进度条,这个控件的蓝图也需要做相应更改。

图17-7 蓝图设置

        蓝图更改的地方,是将之前计算百分比并赋值给进度条的功能,更换为设置材质中对外暴露的ProgressAlpha参数。保存后运行效果如下:

图17-8 血条效果

猜你喜欢

转载自blog.csdn.net/surkea/article/details/127293521