目录
在第15节的内容中,我们使用了DebugScalarValue函数将数字显示在材质上,在这一节我们将尝试编写和使用材质函数(Material Function)。
1. 创建材质函数
首先,在Material文件夹下右键 -> 材质和纹理 -> 材质函数,命名为MF_HitFlashDemo,我们将把受击闪烁的功能封装成函数以便重用。打开MF_HitFlashDemo,并将M_HitFlashDemo(第16节实现的材质)控制“自发光颜色”的部分蓝图复制粘贴到其中,连上“OutputResult”左边的引脚。
然后,勾选材质函数的“公开到库”选项,这样才能在其他材质中使用。保存后回到M_HitFlashDemo中,右键添加MF_HitFlashDemo节点(注意项目自带了一个MF_HitFlash函数,名字很像不要混淆)。接下来就可以把节点连到“自发光颜色”,并删除之前的一大堆节点。
保存后运行测试,可以发现效果和之前一模一样。因此,将常用材质效果封装为材质函数后,就可以十分方便地将其应用到后续的任何材质中。
进一步,我们还可以为材质函数添加输入。双击材质函数节点,可以直接跳转到材质函数的蓝图中。在TimeToHit节点后新增一个FunctionInput节点,勾选其“将预览值用作默认值”。这样在其它场景调用这个函数时,就可以根据不同的场景选择输入。
2. UI材质
现在我们将要创建一个材质,并应用掉之前实现的血量条UI上。首先,创建一个新材质M_HealthBar,将材质的材质域从默认的“表面”切换为“用户界面”,并添加如下节点:
以上节点实现的功能是,根据一个0~1值来控制血条红色与白色的比例,刚好这个0~1值与之前实现血量条计算百分比的逻辑相符。LinearGradient恰如其名,输出的是一系列固定的0~1线性变化的值,ProgressAlpha参数则作为控制显示红白色的阈值,实现控制的方式就是后面的If节点。默认下ProgressAlpha值为1,表示满血状态。
进入血条控件PlayerHealth_Widget,删除之前的ProgressBar,然后使用一个Image替代,这个Image的“外观” -> “图像”就设置为M_HealthBar。因为删除了进度条,这个控件的蓝图也需要做相应更改。
蓝图更改的地方,是将之前计算百分比并赋值给进度条的功能,更换为设置材质中对外暴露的ProgressAlpha参数。保存后运行效果如下: