1、目标
在时钟界面显示当前时钟信息,同时设置特殊按钮可以快速推进时间用于测试。
2、创建GameClock.cs脚本
在Assets -> Scripts -> TimeSystem目录下创建GameClock.cs脚本。
代码如下:
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;public class GameClock : MonoBehaviour
{[SerializeField] private TextMeshProUGUI timeText = null;[SerializeField] private TextMeshProUGUI dateText = null;[SerializeField] private TextMeshProUGUI seasonText = null;[SerializeField] private TextMeshProUGUI yearText = null;private void OnEnable(){EventHandler.AdvanceGameMinuteEvent += UpdateGameTime;}private void UpdateGameTime(int gameYear, Season gameSeason, int gameDay, string gameDayOfWeek, int gameHour, int gameMinute, int gameSecond){// Update timegameMinute = gameMinute - (gameMinute % 10); // 10的倍数显示string ampm = "";string minute;if(gameHour >= 12){ampm = " pm";}else{ampm = " am";}if(gameHour >= 13){gameHour -= 12;}if(gameMinute < 10){minute = "0" + gameMinute.ToString();}else{minute = gameMinute.ToString();}string time = gameHour.ToString() + ":" + minute + ampm;timeText.SetText(time);dateText.SetText(gameDayOfWeek + ". " + gameDay.ToString());seasonText.SetText(gameSeason.ToString());yearText.SetText("Year " + gameYear);}
}
3、优化TimeManager.cs脚本
作用:触发时间加速
添加如下代码:
/// <summary>
/// Advance 1 game minute
/// </summary>
public void TestAdvanceGameMinute()
{for(int i = 0; i < 60; i++){UpdateGameSecond();}
}/// <summary>
/// Advance 1 day
/// </summary>
public void TestAdvanceGameDay()
{for(int i = 0; i < 86400; i++){UpdateGameSecond();}
}
同时在UpdateGameSecond函数中添加:
4、优化Player.cs脚本
增加特定按钮触发加速时间的逻辑。
添加如下方法:
/// <summary>
/// Temp routine for test input
/// </summary>
private void PlayerTestInput()
{// Trigger Advance Timeif (Input.GetKey(KeyCode.T)){TimeManager.Instance.TestAdvanceGameMinute();}// Trigger Advance Dayif (Input.GetKey(KeyCode.G)){TimeManager.Instance.TestAdvanceGameDay();}
}
然后在Update()中添加该方法:
5、创建时钟UI
(1)添加GameClock物体
在Hierarchy -> PersistentScene -> UI -> MainGameUICanvas -> UICanvasGroup下创建空物体命名为GameClock。
该对象添加Image组件。
(2)设置GameClock定位到右上角
按住Shift键,然后点击右上角。
修改PosX和PosY的值为-4和-2.5。
(3)添加Text组件
在GameClock下添加空物体命名为Year,然后该对象添加TextMeshPro - Text(UI)组件,具体配置如下:
复制Year得到另外三个对象分别为Season、Date Text、Date Time如下图所示:
然后给GameClock对象添加GameClock组件,配置对应的信息如下:
运行程序,显示如下:
当按下T键后,分的时间会加速,当按下G后,天的时间会加速。