当前位置: 首页 > news >正文

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

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.lryc.cn/news/525533.html

相关文章:

  • 数据结构测试题1
  • android wifi AsyncChannel(WifiManager和WifiP2pManager)
  • 【Image Captioning】DynRefer
  • Midjourney基础-常用修饰词+权重的用法大全
  • 没有屋檐的房子-023粪堆旁边的舞蹈
  • 基于Docker的Kafka分布式集群
  • 【博客之星】年度总结:在云影与墨香中探寻成长的足迹
  • SpringBoot的Swagger配置
  • machine learning knn算法之使用KNN对鸢尾花数据集进行分类
  • C语言练习(16)
  • SOAFEE 技术研讨会:汽车软件定义与自动驾驶技术探讨
  • R语言学习笔记之开发环境配置
  • 多版本并发控制:MVCC的作用和基本原理
  • ubuntu18.04安装nvm管理本机node和npm
  • 【数据结构进阶】红黑树超详解 + 实现(附源码)
  • leetcode_3092. 最高频率的 ID
  • 鸿蒙仓颉环境配置(仓颉SDK下载,仓颉VsCode开发环境配置,仓颉DevEco开发环境配置)
  • 数据统计–图形报表(day11)
  • 源码分析之Openlayers样式篇CircleStyle类
  • 解决CentOS9系统下Zabbix 7.2图形中文字符乱码问题
  • AF3 FourierEmbedding类源码解读
  • vsftpd虚拟用户部署
  • MySQL 容器已经停止(但仍然存在),但希望重新启动它,并使它的 3306 端口映射到宿主机的 3306 端口是不可行的
  • 汇编实验·顺序程序设计
  • AIGC视频扩散模型新星:Video 版本的SD模型
  • HarmonyOS:通过(SQLite)关系型数据库实现数据持久化
  • 10. SpringCloud Alibaba Sentinel 规则持久化部署详细剖析
  • STM32更新程序OTA
  • MarsCode青训营打卡Day10(2025年1月23日)|稀土掘金-147.寻找独一无二的糖葫芦串、119.游戏队友搜索
  • vue(33) : 安装组件出错解决