【UE4 RTS】08-Setting up Game Clock

前言

本篇实现的效果是在游戏运行后能够记录当前的游戏时间(年月日时分秒),并且可以通过修改变量从而改变游戏时间进行的快慢。

效果

步骤

1. 在Blueprints文件夹中新建如下两个文件夹,分别命名为“GameSettings”、“Player”

将“RTS_CameraPawn_BP”和“RTS_PlayerController_BP”移动到“Player”文件夹中

 将“RTS_GameModeBase_BP”移动到“GameSettings”文件夹中

新建一个游戏状态基础

命名为“RTS_GameState_BP”

 新建一个文件夹,命名为“Library”

在该文件夹中新添加一个蓝图函数库

命名为“RTS_FuncLib”

 再添加一个蓝图接口

命名为“RTS_GameTime_IF”

 

 2. 打开蓝图函数库“RTS_FuncLib”,重命名新函数为“SetGameTime”

添加三个输入和两个输出,分别命名为“DeltaTime”、“GameSpeed”、“InitialGameTime”、“GameTime”、“DayCount”

添加如下节点

3. 打开蓝图接口“RTS_GameTime_IF”,将新函数重命名为“UpdateGameSpeed”

添加一个输入,命名为“SpeedMultiplier”,浮点类型

4. 打开游戏状态基础“RTS_GameState_BP”,新建一个宏,命名为“ReferneceCasts”

在宏中添加如下节点来获取玩家控制器“RTS_PlayerController_BP”的引用,其中变量“ControllerRef”是类型转换后引脚“As RTS Player Controller BP”提升为的变量。

在事件图表中添加如下节点来执行宏

 每一帧执行蓝图函数库中的创建的函数“SetGameTime”

将引脚“GameSpeed”和“InitialGameTime”提升为变量,然后命名为“GameSpeed”和“GameTime”,默认值分别为150、0

 新添加一个整型变量,命名为“DayCounter”

 设置“GameTime”和“DayCounter”

添加如下三个整型变量,分别命名为“Hours”、“Minutes”、“Seconds” ,均为公有变量,这个变量用于表示当前的游戏时间。其中,“Hour”的默认值设置为11,表示游戏一开始游戏处于中午。

在游戏开始时,根据时分秒设置初始的游戏时间(单位:小时)

 再添加三个整型变量,分别命名为“Year”、“Month”、“Day”,用于表示当前的游戏日期,均为公有变量,这里默认值分别设置为2023、8、10

 

 添加一个整型数组类型变量,命名为“GameDate”

在设置初始游戏时间后继续设置初始游戏日期

新建一个浮点型变量,命名为“DefaultGameSpeed”,默认值设为150

设置初始游戏速度:

新建一个函数,命名为“SetClock”

 该函数逻辑如下:

再添加一个函数,命名为“SetCalendar”

函数逻辑如下:

再事件图表中去调用这两个函数

在类设置中添加蓝图接口“RTS_GameTime_IF”

新添加一个浮点型变量,命名为“SpeedMutiplier”,默认值设为1

 在事件图表中添加如下节点

 添加一个事件调度器,命名为“GameSpeedControl”

 添加一个浮点类型输入,命名为“GameTime”

 调用该事件调度器

 5. 打开游戏模式基础“RTS_GameModeBase_BP”,设置游戏状态类为“RTS_GameState_BP”

此时运行游戏可以看到视口左上角打印的年月日时分秒,如下所示:

 如果想加快游戏时间,可以将游戏状态“RTS_GameState_BP”中的变量“DefaultGameSpeed”的默认值设置小一点。

 比如我把变量“DefaultGameSpeed”的默认值设置为0.025,游戏时间就加快了:

 变量“DefaultGameSpeed”控制着现实时间和游戏时间的换算关系:

        如果 “DefaultGameSpeed”的默认值设置为3600,就表示现实时间和游戏时间完全同步;

        如果 “DefaultGameSpeed”的默认值设置为150,就表示现实中的1小时=游戏中的1天;

        如果 “DefaultGameSpeed”的默认值设置为2.5,就表示现实中的1分钟=游戏中的1天;

猜你喜欢

转载自blog.csdn.net/ChaoChao66666/article/details/132207608