
本文将在分步描述在虚幻引擎(UE5.1)中将实现UI方面的几个内容,如下所示:
创建UI和集成当前分数最高分
请在Content Drawer中创建一个UI文件夹并创建一个名为BP_MainWidget的控件蓝图。

这里蓝图继承了User Widget。

蓝图的编辑窗口如下所示:

首先,将Canvas Panel从左边Palette面板的Panel项拖到下方Higher Key面板的[BP_MainWidget]中创建。

创建时,会显示一个中间有虚线的矩形,矩形的范围成为设置UI的空间。

通过移动矩形右下角的双向箭头来设置UI屏幕的大小,这里3D天堂设置为1920*1080。

在Palette的Common项中,在Higheraki面板中创建文本作为Canvas Panel的子对象,并设置细节值,如下。

以相同的方式创建最高分文本和当前/最高分UI。

保存并加载最高分数
这与Unity不同,虚幻UE引擎需要在游戏中创建UI,为实现该功能,需要在项目开始时使用BP_GameModeBase蓝图。
在BP_GameModeBase蓝图的Event BeginPlay节点中,创建一个相应UI(BP_MainWidget)的节点。

上述节点是创建小部件并将小部件添加到ViewPort的节点,在BP_GameModeBase中添加可以包含当前分数和最高分数的变量。

每当Enemy被击中并消失时,curScore应该增加1。为此,在BP_GameModeBase中创建一个增加curScore的函数,并在删除BP_Bullet的Enemy时创建一个节点来调用该函数。
首先,创建一个增加curScore值的函数。
在左侧的Function中添加一个带有+的函数,并将名称设置为AddScore。

在创建的AddScore节点的细节窗口的Input项中添加一个整数值的score变量。通过添加此值,可以在调用函数时将评分值作为参数传递。

接着创建一个节点以将分配的分数值添加到curScore。

并且如果curScore通过bestScore,还会添加一个更新bestScore的节点。

现在从BP_Bullet调用该函数。
子弹与敌人碰撞并产生爆炸效果后,添加以下节点。

Get Game Mode获取当前运行的游戏模式类,将带入对应节点的值强制转换为BP_GameModeBase,判断该值,如果正确则导入并使用BP_GameModeBase中的AddScore函数。
如果找不到,请取消选中右上角的复选框,该复选框仅显示与拖动的引脚相关的节点。

并且需要将BP_GameModeBase的curScore和bestScore与BP_MainWidget的text_curScoreD和text_bestScoreD关联起来。
在text_curScoreD的细节面板中,通过Content项文本右侧的组合框执行Create Binding。

然后,在BP_MainWidget中创建以下函数。

创建一个节点,将BP_GameModeBase的curScore值带到对应的节点

text_bestScoreD也是以同样的方式实现的。

如果运行它,你可以看到它是这样应用的:

但是,如果重新开始,高分将被重置,当游戏结束时,最高分被保存,当游戏再次进行时,保存的最高分被调用。
首先,UE引擎中有一个单独的类可以存储简单的游戏信息,因此创建一个扩展保存游戏类的BP_SaveScore蓝图。

然后,在蓝图中创建一个变量来存储分数。

在BP_GameModeBase中创建一个SaveScore函数,创建一个BP_SaveScore Blueprint创建一个节点来保存数值。

使用BP_SaveScore类创建一个游戏对象,并使该对象成为一个名为Save instance(提升为变量)的变量。然后,将Save Value赋给该对象的ScoreData值。
最后,通过Save Game to Slot节点保存名为BestScoreData的对象,每当在AddScore函数中更新最高分时,就会保存相应的函数。

如果运行并通过文件资源管理器检查它,可以看到一个名为BestScoreData的已保存文件。

现在添加LoadScore函数来加载文件。

另外,由于第一次执行时没有对应的存档,所以增加了一个节点来检查存档是否存在。

加载文件的时间被添加到Event Beginplay。

再运行一下游戏,可以看到最高分已经正常输出了。

…
以上是3D天堂关于虚幻UE引擎中的创建UI分数界面的全部内容,如果你有任何反馈,请随时在本页面下方留言。