野外生存游戏【2. 快捷栏与物体拿放】
野外生存游戏【2. 快捷栏与物体拿放】
鲸拓工作室UE版本:5.2.1
本章实现效果预览
总体设计
由于此游戏是设计为多人游戏,所以在某些方面的实现会比较繁琐,建议读者先通读掌握思路之后,再根据自己需求调整
本章是基于上一节的工程文件开发而来,保留了之前的目录结构,新增了快捷栏与物品相关逻辑,目前结构如下
UI与动画
新增了一个 W_Hotbar
将它加入到 W_MainWidget 中
导入一个斧头模型
配置插槽
分别创建第一人称的动画蓝图与混合空间、第三人称的动画蓝图与混合空间、第一人称拿斧头和第三人称拿斧头的混合空间
这里之所以区分第一人称和第三人称,就是因为这个多人游戏,第一人称是给自己看的,第三人称是给别人看的
混合空间内部就是一些静止与跑步动画的混合,这里以第一人称拿斧头为例展示,比较简单,其他的都类似
第一人称的动画蓝图内容如下,目前为止比较简洁,核心就是根据不同的状态输出不同的混合空间
第三人称也是一样的,只不过输出的混合空间是第三人称的而已
在事件图表中编写如下逻辑,根据速度和当前装备的状态来实时更新动画
其中 E_EquipableState 的枚举如下,目前只用到了 default 和 hatchet
然后打开 BP_FirstPersonCharacter,配置骨骼体和动画蓝图,第一人称的骨骼体也是类似
但是要注意,这里的第三人称骨骼体是配置给其他玩家看的,我们自己的视角要隐藏起来,所以要勾选 owner no see
新增物体
接下来编写逻辑,要求按下R键就新增一把斧头到快捷栏
首先打开 Items 文件夹,新增 BP_EquipableMaster 继承自 BP_ItemMaster
然后在 Equipables 文件夹里新建如下两个蓝图,都继承自 BP_EquipableMaster
接着在 Tools 文件夹下新增这两个蓝图,分别继承自 BP_FirstPersonEquipable 和 BP_ThirdPersonEquipable
但是要注意,第三人称的斧头(BP_TP_Hachet)的网格体,要勾选 Owner no see,因为是给其他玩家看的,自己的视角不用看,不然会错乱
最后在 Hatchet 文件夹下新增这两个蓝图,也是分别继承自上级目录的第一人称和第三人称的斧头(这里之所以还要再分一层,是因为后面还可以扩展为铁斧头等其他类型的斧头)
这些蓝图里面目前没有任何逻辑,只有一个斧头形状的静态网格体,并且关掉碰撞
好了,斧头的蓝图创建好了,接下来编写相关逻辑
首先创建一个 BPC_PlayerHotbar 继承自 BPC_ItemsContainer
然后打开 BP_FirstPersonCharacter ,补充新增物品到快捷栏的逻辑
修改 BPC_ItemsContainer 里的UpdateUI逻辑
修改Update Item Slot 函数
物体拿放
回到BP_FirstPersonCharacter ,并设置相关按键操作
Use Hotbar Function 函数的具体逻辑如下
首先根据 index 找到快捷栏里面的物品信息,看这个物品是否有效。如果有效的话,就检查手上拿没拿东西,如果没拿就拿上,如果拿了就放下
其中 BPC_PlayerHotbar 的 Check Hotbar 逻辑如下
SpawnEquipableThirdPerson 等事件的逻辑如下(注意 Replicates)
这里的核心思路是以第三人称为主,先绑定第三人称的斧头组件之后,再绑定第一人称
同时还要控制好运行位置(广播、server、client)与组件的owner,避免错乱
物资交换
注:这部分的逻辑在工程文件的 SurvivalCraft_03 中实现
实现一个小功能,允许物体从快捷栏拖到库存,从库存拖到快捷栏
注意下面的 Select 是 ContainerType,不是下面的子类
HotBar的相关接口也需要实现,但基本和 Inventory 的一致
在 Remove 的过程中,如果角色手上拿着东西,也需要移除