RPC游戏案例【3. 装备系统】

装备系统

本章工程文件为:RPG_Tutorial_Series_07,如遇问题可下载项目文件之后自行对照

预期效果:可以捡装备,并配备装备系统UI,也可通过系统上装备

image-20230619112225458

数据管理

首先创建一个S_Weapons结构体,内容如下

image-20230613120613019

其中E_Weapon_Types枚举的内容如下

image-20230613120645472

创建一个DB_Weapons的数据表,补充如下内容

image-20230613120727220

创建一个S_Slots结构体,用于存储武器数据的引用

image-20230613120812627

接着创建一个BP_Weapon的Actor蓝图,可以通过配置来设置不同的网格体,下面设置的是Heavy_Sword

image-20230613120936044

编写完成之后,将这个Actor拖到场景里,就会看到对应的Heavy_Sword模型。如果在ItemData里选择其他的模型,场景里的模型也会实时发生变化

image-20230613122728302

蓝图组件

创建一个蓝图组件,命名为BPC_EquipmentSystem,我们在这里实现装备系统的主要逻辑

在此之前,先创建一个输入,命名为IA_Interact

image-20230613122939552

当玩家按下E键的时候,就捡起面前的物体

image-20230613123014872

进入BPC_EquipmentSystem,创建一个AddWeapon函数

image-20230613123113883

当玩家按下E键的时候,根据摄像机的位置和方向,检测前方是否有物体,有的话存入weaponSlots里

image-20230613123221376

image-20230613123232710

UI

首先在Equipment_System下创建一个UI文件夹,然后创建两个用户控件

image-20230614135655040

WB_EquipableSlot的内容如下

image-20230614135737970

WB_Equipment的内容如下

image-20230614135807943

image-20230614135839088

image-20230614135850895

接着新增一个输入,按Enter键就弹出这个装备栏

image-20230614135932896

修改BPC_EquipmentSystem,补充菜单弹出逻辑

image-20230614140106641

image-20230614140050051

编译保存,进入游戏里,按下Enter键,就可以弹出菜单了

image-20230614140145078

我们再创建一个WB_ItemSlot

image-20230616105946446

image-20230616110024878

在WB_Equipment中创建一个Item List的Canvas,并填入垂直框和图像

垂直框和图像的大小与Canvas一样

image-20230616110226724

补入如下逻辑

image-20230616110247810

image-20230616110258024

编译运行,当我们按E收入武器之后,再按Enter,点击插槽,就能看到武器栏了

image-20230616110353684

视口

接下来我们完善一下UI,下面是完成效果

image-20230617135646087

首先打开BP_ThirdPersonCharacter,创建一个SpringArm和SceneCaptureComponent2D

image-20230617135812606

image-20230617135839035

其中SceneCaptureComponent2D的Texture Target放在以下文件夹里

image-20230617135913508

创建好之后打开事件图表,在Event Begin Play后面追加这一段

image-20230617140103895

然后运行游戏,就会发现UI文件夹下面生成了CharacterEquipmentTextureTarget

我们右键CharacterEquipmentTextureTarget,然后创建一个材质,命名为M_CharacterEquipmentTextureTarget

image-20230617140153084

打开CharacterEquipmentTextureTarget,设置尺寸

image-20230617140231889

打开M_CharacterEquipmentTextureTarget,编写如下材质

image-20230617140257125

然后打开WB_Equipment,添加如下组件

image-20230617140520261

image-20230617140533142

image-20230617140551745

image-20230617140620949

打开WB_ItemSlot,编写鼠标点击事件,创建Item变量

image-20230617140958793

打开WB_Equipment,补充Assign Item Slot自定义事件

image-20230617141104568

再在构造事件里补充Item的设置

image-20230617141145380

最后打开WB_EquipableSlot,完善鼠标点击事件即可

image-20230617141238946

插槽

接着我们来实现插槽,让每一个框出现的内容都不一样

image-20230618111633758

首先打开BP_ThirdPersonCharacter,将原来的网格体重命名,然后复制插槽名

image-20230618111712397

打开事件图表,新增一个EquipItem的自定义事件

image-20230618111932533

打开S_Weapons,新建一个插槽项,将刚刚复制的插槽名设置为默认值

image-20230618111827424

打开WB_Equipment,将原来的构造函数替换成如下的自定义事件

image-20230618112046363

image-20230618112100537

再打开WB_EquipableSlot,修改点击事件,调用这个函数即可

image-20230618112144026

武器

我们接下来给角色再加几种武器,分别是盾牌和弓箭

image-20230619112225458

首先打开Resource文件夹,将下面这两个文件夹导入进去,导入选项默认就可以了

image-20230619112314512

image-20230619112331937

打开M_Medieval_Shield,将材质贴图放进去

image-20230619112438446

打开弓箭文件夹,新建一个M_Wooden_Bow的材质,将相关贴图都放进去,然后应用在弓箭上

image-20230619112533788

image-20230619112617012

接着打开SK_Mannequin,创建两个插槽,调整弓箭和护盾的位置

image-20230619112805416

然后打开BP_ThirdPersonCharacter,创建两个静态网格体,将插槽应用上去

image-20230619112854918

同时在事件图表中新增两个自定义事件,用于装备武器

image-20230619112948485

打开WB_Equipment,创建四个文本

image-20230619113131280

然后修改Assign Item Slot事件里的逻辑

image-20230619113229225

最后在DB_Weapons里面补充对应的数据即可

image-20230619113255970

image-20230619113341112