野外生存游戏【6. 消耗品】
野外生存游戏【6. 消耗品】
鲸拓工作室本系列教程逻辑繁杂,细节很多,本文更多的是作为大纲指引和逻辑梳理,可能笔记中还存在部分操作上缺漏,还请多包涵,有意者可下载工程文件(SurvivalCraft_06)自行对照学习
UE版本:5.2.1
消耗品
数据准备
我们先创建两个结构,用于定义消耗品
再根据上面定义的结构体,创建一个数据表,用于存储消耗品的信息
其中 InstantEffect? 是表示该消耗品是瞬间恢复,还是随时间推移缓慢恢复
Row Name 则与 DT_Itmes 数据表对应,这里创建了一个浆果作为示例,在 DT_Itmes 中,浆果的 ID 为6,所以这里的 Row Name 也为6
别忘了把 DT_Itmes 中,浆果的类型改成消耗品
核心逻辑
我们在使用 Hotbar 里面的物品时,都会调用 Use Hotbar Function。所以这里就打开这个函数,补充消耗品的相关逻辑
Consume Item Function 的逻辑如下:
- 根据传入的 Container 类型和索引,找到需要消耗的那个物品;
- 将这个物品的数量减1
- 根据这个物品,去查数据表,看这个物品能恢复哪些状态
- 创建一个循环,逐个恢复状态
上面的逻辑中用到了减物品的函数,我们需要在 Container 中补上,逻辑如下
即时恢复
然后就是即时恢复的函数 Update Stat Instant,实现逻辑如下
- 根据类别,找到当前的状态值和最大状态值,然后加上数据表中定义的状态值(目的是恢复状态)
- 根据不同的类别,修改不同的状态,如果是食物或者水源,还需要解除对应的饥饿和缺水状态
- 最后统一更新UI
到此,即时恢复的逻辑就写好了
缓慢恢复
为了实现缓慢恢复,我们在事件图表中创建这么一个自定义事件
这个函数是通过不同的状态,设置不同的定时器来恢复,其中核心的定时逻辑如下:
Set Timer by Function Name
的逻辑是用于在指定的时间后执行特定的函数,那么我们就根据该消耗品能消耗的时间 Duration 和该消耗品能恢复的状态值,做一个除法。除出来的结果n,就代表了该消耗品,每隔n秒,就应该给角色恢复1点状态值,当已经消耗完了的时候,就应该停止恢复。
具体实现逻辑如下:
其中三种状态的恢复逻辑基本类似,如下:
定时逻辑和对应的调用创建完毕之后,我们再来补充一下上面函数中用到的更新状态和UI的逻辑,也很简单
最后,在使用消耗品的时候把上面的事件调用一下就好了
统计信息
预期效果,将玩家的所有信息统计到一个widget里面
首先创建一个 W_PlayerStat 进度条(这里面的text是和StatName相绑定的)
并实现更新进度条的逻辑
接着创建一个 W_PlayerInfoWindow, 用户统计汇总四个信息
更新逻辑如下
将该 Widget 添加到 W_Inventory 中
最后将该事件应用在 PlayerController 中即可