斯坦福 UE4 C++ ActionRoguelike游戏实例教程 13.使用GameplayTag实现使用钥匙卡打开箱子
斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论
概述
本篇文章将会展示Gameplay另一个用法,也就是我们最常见的使用特定道具交互特定的机关。例如本文要实现的,获得不同的钥匙卡,然后根据钥匙卡打开不同的箱子。
目录
- 创建拉杆
- 创建标签
- 修改宝箱
创建拉杆
首先快速创建一个拉杆,其中使用到的静态网格体都可以从ExampleContent/Meshes中找到。
其中,HandleMesh的默认旋转值为Y=30°,之后拉下拉杆,我们会将其设置为Y=-30°。
由于此拉杆要和我们角色进行交互,这里需要继承以前实现的GameInterface接口,该接口允许带有SurInteractionComponent组件的角色对其交互,并执行接口中定义的Interact函数。具体的可以参考这篇文章:https://www.bilibili.com/read/cv18878087,或者查看课程第四章第10节。
对Interact函数进行重载。这里仅仅定义了拉杆最基本的功能,之后还会有其他补充:
创建标签
接着创建钥匙卡相关标签。在项目设置->GameplayTags中创建KeyCard.Blue和KeyCard.Yellow(蓝色钥匙卡和黄色钥匙卡)
接着为刚才创建的拉杆创建一个变量KeyCard
,表示这个拉杆对应的钥匙卡是哪个。
这里可以为其设置默认值,也可以勾选可编辑实例,让这个属性暴露的UE编辑器中,这样我们就可以在蓝图外修改它对应的Tag了。
为刚才重载的Interact添加赋予标签的功能,当角色与拉杆交互时,拉杆会获取角色的ActionComponent,并将自己的钥匙卡标签赋予给角色。
修改宝箱
与拉杆对应的,我们也要修改宝箱的逻辑,能让其对钥匙卡作出反应。宝箱相关的内容,还是可以参考这篇文章:https://www.bilibili.com/read/cv18878087,或者查看课程第四章。
为宝箱添加一个Tag类型的变量,表示该宝箱需要的钥匙卡类型。同样的,勾选可编辑实例将其暴露在编辑器中。
在原来打开宝箱的逻辑前面添加上检查钥匙卡的蓝图节点。在每次试图与宝箱交互时,都会检查交互者身上的标签,如果拥有Require Key Card
标签,那么就可以打开宝箱。
将拉杆拖到场景中,我们可以直接在右侧的细节面板调整拉杆对应的钥匙卡Tag
同样的,我们可以在右侧的细节面板调整宝箱所需要的钥匙卡Tag。
进入游戏,查看最终结果。
可以从左上角的Debug信息看到,一开始角色没有钥匙卡标签,试图打开箱子的时候(图里会出现绿色的线)是没有任何反应的,
与拉杆进行交互后,角色获得了钥匙卡标签,此时就可以与宝箱进行交互了。
最后还有一个细节,我们在使用蓝图节点HasTag(拥有标签)
时,注意到下面有一个Exact Match
。就如描述所说的,如果勾选上的话,在判断是否拥有标签时,会要求进行比较的标签之间是完全相同的。这里完全相同的意思是要求其父标签和子标签是完全一样的。
反之,如果不勾选的话,将会进行一定程度的模糊搜索。如下图所示:
箱子的Require Key Card像如图设置。如果不勾选上的话,只要求父标签为KeyCard,这样的话只要父标签是KeyCard,不管拿到什么颜色都能打开箱子。
反之,如果勾选上的话,如果你拿的KeyCard带有子标签,那么就意味着这些KeyCard都打不开箱子,毕竟此时的箱子,只认KeyCard单独一个父标签。