前言
本篇實現的效果是在游戲運行后能夠記錄當前的游戲時間(年月日時分秒),并且可以通過修改變量從而改變游戲時間進行的快慢。
效果
步驟
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天;