斯坦福 UE4 C++ ActionRoguelike游戏实例教程 13.使用GameplayTag实现使用钥匙卡打开箱子

斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论

概述

本篇文章将会展示Gameplay另一个用法,也就是我们最常见的使用特定道具交互特定的机关。例如本文要实现的,获得不同的钥匙卡,然后根据钥匙卡打开不同的箱子。

目录

  1. 创建拉杆
  2. 创建标签
  3. 修改宝箱

创建拉杆

首先快速创建一个拉杆,其中使用到的静态网格体都可以从ExampleContent/Meshes中找到。

其中,HandleMesh的默认旋转值为Y=30°,之后拉下拉杆,我们会将其设置为Y=-30°。

image-20230417170844142

创建Actor蓝图

由于此拉杆要和我们角色进行交互,这里需要继承以前实现的GameInterface接口,该接口允许带有SurInteractionComponent组件的角色对其交互,并执行接口中定义的Interact函数。具体的可以参考这篇文章:https://www.bilibili.com/read/cv18878087,或者查看课程第四章第10节。

image-20230417170947873

添加接口

对Interact函数进行重载。这里仅仅定义了拉杆最基本的功能,之后还会有其他补充:

image-20230417171030793

重载函数

image-20230417171309034

一次性拉杆

创建标签

接着创建钥匙卡相关标签。在项目设置->GameplayTags中创建KeyCard.Blue和KeyCard.Yellow(蓝色钥匙卡和黄色钥匙卡)

image-20230417172035183

新建标签

接着为刚才创建的拉杆创建一个变量KeyCard,表示这个拉杆对应的钥匙卡是哪个。

这里可以为其设置默认值,也可以勾选可编辑实例,让这个属性暴露的UE编辑器中,这样我们就可以在蓝图外修改它对应的Tag了。

image-20230417172539153

新建Tag变量

为刚才重载的Interact添加赋予标签的功能,当角色与拉杆交互时,拉杆会获取角色的ActionComponent,并将自己的钥匙卡标签赋予给角色。

image-20230417172614102

修改蓝图

修改宝箱

与拉杆对应的,我们也要修改宝箱的逻辑,能让其对钥匙卡作出反应。宝箱相关的内容,还是可以参考这篇文章:https://www.bilibili.com/read/cv18878087,或者查看课程第四章。

为宝箱添加一个Tag类型的变量,表示该宝箱需要的钥匙卡类型。同样的,勾选可编辑实例将其暴露在编辑器中。

image-20230417173115467

创建RequireKeyCard变量

在原来打开宝箱的逻辑前面添加上检查钥匙卡的蓝图节点。在每次试图与宝箱交互时,都会检查交互者身上的标签,如果拥有Require Key Card标签,那么就可以打开宝箱。

image-20230417173101123

添加检查标签的蓝图节点

将拉杆拖到场景中,我们可以直接在右侧的细节面板调整拉杆对应的钥匙卡Tag

image-20230417173227814

修改拉杆对应的钥匙卡标签

同样的,我们可以在右侧的细节面板调整宝箱所需要的钥匙卡Tag。

image-20230417173208763

修改宝箱所需要的钥匙卡Tag

进入游戏,查看最终结果。

可以从左上角的Debug信息看到,一开始角色没有钥匙卡标签,试图打开箱子的时候(图里会出现绿色的线)是没有任何反应的,

与拉杆进行交互后,角色获得了钥匙卡标签,此时就可以与宝箱进行交互了。

最后还有一个细节,我们在使用蓝图节点HasTag(拥有标签)时,注意到下面有一个Exact Match。就如描述所说的,如果勾选上的话,在判断是否拥有标签时,会要求进行比较的标签之间是完全相同的。这里完全相同的意思是要求其父标签和子标签是完全一样的。

反之,如果不勾选的话,将会进行一定程度的模糊搜索。如下图所示:

image-20230417173840183

image-20230417173907795

箱子的Require Key Card像如图设置。如果不勾选上的话,只要求父标签为KeyCard,这样的话只要父标签是KeyCard,不管拿到什么颜色都能打开箱子。

反之,如果勾选上的话,如果你拿的KeyCard带有子标签,那么就意味着这些KeyCard都打不开箱子,毕竟此时的箱子,只认KeyCard单独一个父标签。

posted @ 2023-04-18 18:25  仇白  阅读(205)  评论(0编辑  收藏  举报