Unity3D仿星露谷物语开发25之创建时钟界面

ops/2025/1/24 11:44:20/

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后,天的时间会加速。


http://www.ppmy.cn/ops/152731.html

相关文章

关于ARM和汇编语言

一图流 ARM 计算机组成 输入设备 输出设备 存储设备 运算器 控制器 处理器读取内存程序执行的过程 取指阶段&#xff1a;控制器器通过地址总线向存储器发送想要获取的指令的地址编号&#xff0c;存储器将指定的指令发送给处理器 译码阶段&#xff1a;控制器对指令进行分…

vue2的$el.querySelector在vue3中怎么写

这个也属于直接操作 dom 了&#xff0c;不建议在项目中这样操作&#xff0c;不过我是在vue2升级vue3的时候遇到的&#xff0c;是以前同事写的代码&#xff0c;也没办法 先来看一下对比 在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 refxxx 的实例&#xff0c;并且…

Spring Boot 3.x 整合 Logback 日志框架(支持异步写入)

Spring Boot 3.x 整合 Logback 日志框架&#xff08;支持异步写入&#xff09; 在构建任何应用程序时&#xff0c;良好的日志管理都是必不可少的。日志可以帮助我们监控、调试和跟踪代码的运行情况。 1. 添加日志配置文件 在 /resources 资源目录下&#xff0c;创建名为 log…

计算机网络 (53)互联网使用的安全协议

一、SSL/TLS协议 概述&#xff1a; SSL&#xff08;Secure Sockets Layer&#xff09;安全套接层和TLS&#xff08;Transport Layer Security&#xff09;传输层安全协议是工作在OSI模型应用层的安全协议。SSL由Netscape于1994年开发&#xff0c;广泛应用于基于万维网的各种网络…

专业138总分400+中国科学技术大学843信号与系统考研中科大电子信息通信生医先研,真题,大纲,参考书。

顺利逆袭上岸中科大&#xff0c;专业138&#xff0c;总分400&#xff0c;这一年复习确实成长很多&#xff0c;总结一下&#xff0c;希望对大家报考中科大有帮助。843信号与系统&#xff08;重点&#xff09; 你要说843第二难&#xff0c;感觉没人敢说第一.&#xff0c;说实话&…

红外热成像之无人机载荷

电力巡检 相较于传统的人工电力巡线方式&#xff0c;无人机巡检能够在高空对人工难以达到或无法检测的设备进行检测&#xff0c;实现了电子化、信息化、智能化巡检&#xff0c;可以提高巡检的工作效率和应急抢险水平。 森林防火 无人机搭载红外光电系统能在森林高空进行全天候监…

解密AIGC三大核心算法:GAN、Transformer、Diffusion Models原理与应用

在当今数字化时代&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术正以前所未有的速度改变着我们的生活和工作方式。从创意无限的文本生成&#xff0c;到栩栩如生的图像创作&#xff0c;再到动听的音乐旋律&#xff0c;AIGC的魔力无处不在。而这一切的背后&#…

人声检测原理VAD

在机器人的研究中&#xff0c;机器人与人语音交互是一个重要的功能&#xff0c;在语音交互中&#xff0c;人声检测至关重要。不论是在手机中&#xff0c;还是在esp32芯片上&#xff0c;都需要一种简单快捷的方式来检测本地语音&#xff0c;滤掉杂音和噪音。 机器人启动后会一直…