UE4 蓝图 游戏时间设置 《我开始了 太阳开始转动了 》

1,344 阅读3分钟

注:基本上就是把 YTB/watch?v=9_40m38o81M&t=287s 的老哥的RTS教程搬了过来 原来这段视频是720P的,作者人为进行解析后自己实现了一遍。

就是三个BP 
{GameStateBp}:包括游戏时间的设置和对HUD类的生成
{GameTimeHUD}:一个简陋的时间HUD
{SunBp}:控制天空球和太阳,实现白天黑夜的循环

我开始了 太阳开始转动了

GameStateBp

核心有两部分 一个是TICK事件 用于进行游戏时间和现实时间的转换,
             还有一个是任务分发器。

Tick Set Time 时间很宝贵

image.png

SetGameTime function

image.png

这里我用游戏速度和delta time相乘得到每帧游戏时间,
NatureGameTime表示游戏内总过去的时间
返回游戏内总过去的时间和过去的天数

SetClock

image.png

用总时间去得到对应的时分秒 返回数组结束到和HUD共同实现的接口上

SetCalender

image.png

原来视频里没有更新判定 就是每帧直接往里面更新所有数据 自己加了个更新判定 防止无用的数据更新

偷懒就直接拿了原生的日期类做了时间上的更新 就是在一个基础日期上添加游戏过去日期

之后放到和HUD共同实现的接口上

BeginPlay 当需求很多的时候

image.png

第一件事获取并设置playcontrollerRef

用来获取之后的GameTimeHUD

image.png

第二件事设置原始游戏进行时间为零
第三件事设置原始游戏进行日期为设置日期

image.png

不然HUD上的日期就会从0突然变成下一跳的日期
加上延迟是发现HUD和GameStateBp之间的初始化顺序问题没法处理 之后有想法再去处理
第四件事就是设置游戏速度修饰符 也就是游戏速度修正意思

Dispatcher 炸弹人

任务发配器 拥有发送炸弹给申请者并控制引爆的存在

image.png

之后在SUNBP中出现,并控制更新SUNBP中的游戏速度

GameStateBP 回顾

image.png

LIB_GameState 蓝图通信的一种接口实现

image.png

总而言之 言而简之 GameStateBp和之后讲的GameTimeHUD共同实现的接口

GameTimeHUD的数据就是通过这个接口动GameStateBp中获取的

GameTimeHUD

image.png

意思意思得了
功能无非就是显示从GameStateBp中获取的时间数据 同时支持游戏速度的加快减慢暂停

Get_YEAR

image.png

Get_SEC

image.png

为了数据排版不变 做了调整 蓝图改的还是啰里啰唆

加快时间

image.png

利用接口做的通信
那个滑动条值的设置步骤 根据数据添加的顺序灵活调整

减慢时间

image.png

逻辑上都一样 

The World!

image.png

多了个恢复到原来游戏速度的变量

滑动条修改时间速度

image.png

 蓝图就是复杂功能大家往里挤一挤

SUNBp

主要对天空球和太阳的控制 之后暴露的变量 要去世界视图里去连

开始就是爆炸

image.png

GameStateBp那里有个发配任务的dispather 然后他给SUNBp一个遥控炸弹 

每当游戏时间速度改变的时候就会爆炸 引出新事件 SetGameSpeed用于间接设置SUNBp中的太阳速度

一天86400秒 太阳能转360度

image.png

重新获取游戏速度后做了个tick事件 一天86400秒 太阳能转360度 每秒/每度的比例算一下改变发射光的偏移量

image.png

对应的蓝图变量暴露出去

LIB_FUCNTION

 杂货店 什么都放
 

image.png