注:基本上就是把 YTB/watch?v=9_40m38o81M&t=287s 的老哥的RTS教程搬了过来 原来这段视频是720P的,作者人为进行解析后自己实现了一遍。
就是三个BP
{GameStateBp}:包括游戏时间的设置和对HUD类的生成
{GameTimeHUD}:一个简陋的时间HUD
{SunBp}:控制天空球和太阳,实现白天黑夜的循环
我开始了 太阳开始转动了
GameStateBp
核心有两部分 一个是TICK事件 用于进行游戏时间和现实时间的转换,
还有一个是任务分发器。
Tick Set Time 时间很宝贵
SetGameTime function
这里我用游戏速度和delta time相乘得到每帧游戏时间,
NatureGameTime表示游戏内总过去的时间
返回游戏内总过去的时间和过去的天数
SetClock
用总时间去得到对应的时分秒 返回数组结束到和HUD共同实现的接口上
SetCalender
原来视频里没有更新判定 就是每帧直接往里面更新所有数据 自己加了个更新判定 防止无用的数据更新
偷懒就直接拿了原生的日期类做了时间上的更新 就是在一个基础日期上添加游戏过去日期
之后放到和HUD共同实现的接口上
BeginPlay 当需求很多的时候
第一件事获取并设置playcontrollerRef
用来获取之后的GameTimeHUD
第二件事设置原始游戏进行时间为零
第三件事设置原始游戏进行日期为设置日期
不然HUD上的日期就会从0突然变成下一跳的日期
加上延迟是发现HUD和GameStateBp之间的初始化顺序问题没法处理 之后有想法再去处理
第四件事就是设置游戏速度修饰符 也就是游戏速度修正意思
Dispatcher 炸弹人
任务发配器 拥有发送炸弹给申请者并控制引爆的存在
之后在SUNBP中出现,并控制更新SUNBP中的游戏速度
GameStateBP 回顾
LIB_GameState 蓝图通信的一种接口实现
总而言之 言而简之 GameStateBp和之后讲的GameTimeHUD共同实现的接口
GameTimeHUD的数据就是通过这个接口动GameStateBp中获取的
GameTimeHUD
意思意思得了
功能无非就是显示从GameStateBp中获取的时间数据 同时支持游戏速度的加快减慢暂停
Get_YEAR
Get_SEC
为了数据排版不变 做了调整 蓝图改的还是啰里啰唆
加快时间
利用接口做的通信
那个滑动条值的设置步骤 根据数据添加的顺序灵活调整
减慢时间
逻辑上都一样
The World!
多了个恢复到原来游戏速度的变量
滑动条修改时间速度
蓝图就是复杂功能大家往里挤一挤
SUNBp
主要对天空球和太阳的控制 之后暴露的变量 要去世界视图里去连
开始就是爆炸
GameStateBp那里有个发配任务的dispather 然后他给SUNBp一个遥控炸弹
每当游戏时间速度改变的时候就会爆炸 引出新事件 SetGameSpeed用于间接设置SUNBp中的太阳速度
一天86400秒 太阳能转360度
重新获取游戏速度后做了个tick事件 一天86400秒 太阳能转360度 每秒/每度的比例算一下改变发射光的偏移量
对应的蓝图变量暴露出去
LIB_FUCNTION
杂货店 什么都放