第三次引擎编程尝试

ronald1年前职场6500

    本文用来介绍如何实现同步游戏状态给玩家,这里用到了前面介绍的HUD。

基本概念

HUD

    游戏过程中,游戏系统和玩家交互是非常有必要的,UE4提供了HUD来实现将游戏系统状态同步给玩家的方式,也就是说HUD对于玩家来说是只读的;

UI

    不同于HUD是将游戏系统状态同步给玩家,UI是用来提供一种将玩家意图传递给游戏系统的机制;

UMG

    UMG是引擎提供的可视化UI创作工具,用来创建需要呈现给玩家的UI元素,可以是游戏里面的HUD、菜单等;所以后续我们的HUD的创建也是通过UMG来做的。

UMG的使用

image-20220219213723299.png

UMG分为以下几部分:

    (1)控件区罗列展示界面的空间结构

    (2)控件区的组件直接拖拽到工作区,并在图层区进行层级编排

    (3)工作区选中控件之后,在属性区进行控件的属性设置

    (4)控件需要绑定执行流程,在属性区绑定之后在Graph进行流程编辑

游戏中添加HUD

创建Widget Blueprint并编辑

image-20220218141236459.pngimage-20220218141338438.png    游戏内预期效果是在角色没有拾取物品的时候显示文本search diamond,拾取之后变化文本search extract area;拖动文本控件到工作区,并进行文本控件的编辑:

image-20220218141640448.png

控件流程编辑

WXWorkCapture_16452796015935.png

    (1)变量区variable定义变量GetObjectiveExtractArea,定义类型variable typeText类型,并设置default value

    (2)接口区定义接口GetText0,其基本逻辑为获取角色指针GetOwningPlayerPawn转为游戏内角色数据指针Cast TO FPSTpl2Character,获取变量Is Carry Object值,传给Select节点,select节点把对应返回值传回Return Node

    这里用到了UMG常用的节点图:

节点图表

    节点图表由事件节点和函数调用节点组成的节点网络,用于定义对蓝图相关的事件的响应逻辑序列(可以认为是一个可视化的流程搭建工具);且一个蓝图可以有多个graph,即对不同事件定义不同的响应流程。Graph有多种类型,这里用到了Functions类型图表。

Functions

       Functions是一类属于特定蓝图的node graph,且可以被执行,也可以被蓝图内其他graph调用;Functions有一些设置项:

    Access Specifiers:控制Graph的访问权限,默认为public,即其他对象也能调用这个流程;

    Pure vs impure:区别在于pure functions是不会区修改对应蓝图类成员变量的值;通过pure functions做的事情是获取数据或者返回数据的值;

    在本例的Functions用到了:

select node

WXWorkCapture_16452824054234.png

    select node用于返回指定下标index的值,index类型如图所示,可以是boolean可以是integer等;

    在本例中indexbool类型,false 对应字符串GetObjectivetrue对应字符串ExtractAreaindex值为IsCarryObject的值,本质上即根据FPSTpl2Character->bIsCarryObject的值返回对应的字符串。


return node

WXWorkCapture_16452845206258.png

    蓝图中自定义的函数中,遇到return node会退出当前的执行流,并返回return value的输入值,return node的返回值为ReturnVal并定义类型为Text

    本例中return node返回select node的返回值,即根据bIsCarryObject的值返回返回对应的字符串


添加控件到玩家视窗

    通过上面的步骤,我们已经通过UMG完成玩家控件的编辑,下一步我们需要添加编辑好的控件到玩家视窗里面,此时就用到我们之前创建的HUD,并实例化之前创建的控件实例,如下:

image-20220218143841939.pngWXWorkCapture_16453205667843.png

    这里用到了event graphAddToViewport,分别进行介绍:

Event Graph

    所谓event graph是一种可视化的流程控制机制,可以让开发者针对特定的事件去定制化一些函数或者事件处理流程。本例针对的是BeginPlay这个事件,即游戏开始时会抛出这个事件。所以本例的流程可以描述为,当游戏开始时,会创建一个WP_Widgt实例,并添加到视图中AddToViewport


AddToViewport

    AddToViewport于将指定的控件对象添加到游戏的视图,并填满整个游戏区域。

    这里有一个viewportplayerscreen的区别需要关注,根据UE4官方文档的解释:所谓viewport即一个你看你创建的游戏世界的窗口,和player screen的区别在于,对于分屏类游戏,一个viewport可能有多个screen;于是有接口AddToPlayerScreen可以将控件仅添加到viewport的部分区域。


添加HUD到游戏设置中

    进行完上述的步骤,我们运行游戏还是看不到所创建和设置的HUD,这是因为我们还没有把我们的HUD添加到游戏设置中,这里我们需要以下两个步骤:

    第一步,创建GameMode并将我们创建的HUD绑定上去,如下图所示:

image-20220218145158511.pngimage-20220218145620483.pngWXWorkCapture_16453227598137.png    第二步:将我们创建的GameMode绑定到WorldSetting中,如下:

image-20220218145226838.pngimage-20220218145410193.pngimage-20220218150636227.png    以上,运行游戏有如下效果:

image-20220218150655766.png

参考资料

    UE4-初学UMG(一) - 泠枫Jun - 博客园 (cnblogs.com)

    Select | Unreal Engine Documentation



相关文章

第四次引擎编程尝试

第四次引擎编程尝试

本节我们将尝试在游戏中创建AI,并针根据游戏内的事件做出对应的反应。创建自己的AI类· 按照介绍的,先创建一个我们的AI类,因为AI可以移动、碰撞等,所以我们选择其继承自Character· 创建好AI类之后,我们创建其蓝图类· 创建好蓝图我们进入AI的编辑界面从界面中,我们可以看到:    我们的FPSTpl2AIGuard继承自Character,拥有A...

第一次引擎编程尝试

第一次引擎编程尝试

软硬件要求第一次引擎编程尝试给打出的子弹增加爆炸效果    默认创建的FPS游戏子弹击中物体无特殊效果,仅子弹消失,现在我们希望子弹击中物体之后有爆炸的效果,如下所示:粒子系统    粒子系统是计算机图形引擎中模拟一些特定模糊现象的技术,如火、爆炸、烟雾、水流等效果;在项目工程中,美术在引擎里面制作粒子特效,保存下来就...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。