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

Unity3D仿星露谷物语开发58之保存时钟信息到文件

1、目标

保存当前的时钟信息到文件中。

2、修改TimeManager对象

TimeManager对象添加组件:Generate GUID

3、修改SceneSave.cs脚本

添加1行代码:

4、修改TimeManager.cs脚本

添加:

using System;

修改TimeManager类:

添加属性:

    private string _iSaveableUniqueID;public string ISaveableUniqueID { get { return _iSaveableUniqueID; }  set { _iSaveableUniqueID = value; } }private GameObjectSave _gameObjectSave;public GameObjectSave GameObjectSave { get { return _gameObjectSave; } set { _gameObjectSave = value; } }   

添加方法:

    protected override void Awake(){base.Awake();ISaveableUniqueID = GetComponent<GenerateGUID>().GUID;GameObjectSave = new GameObjectSave();}private void OnEnable(){ISaveableRegister();EventHandler.BeforeSceneUnloadEvent += BeforeSceneUnloadFadeOut;EventHandler.AfterSceneLoadEvent += AfterSceneLoadFadeIn;}private void OnDisable(){ISaveableDeregister();EventHandler.BeforeSceneUnloadEvent -= BeforeSceneUnloadFadeOut;EventHandler.AfterSceneLoadEvent -= AfterSceneLoadFadeIn;}private void BeforeSceneUnloadFadeOut(){gameClockPaused = true;}private void AfterSceneLoadFadeIn(){gameClockPaused = false;}public void ISaveableRegister(){SaveLoadManager.Instance.iSaveableObjectList.Add(this);}public void ISaveableDeregister(){SaveLoadManager.Instance.iSaveableObjectList.Remove(this);}public GameObjectSave ISaveableSave(){// Delete existing scene if existsGameObjectSave.sceneData.Remove(Settings.PersistentScene);// Create new scene saveSceneSave sceneSave = new SceneSave();// Create new int dictionarysceneSave.intDictionary = new Dictionary<string, int>();// Create new string dictionarysceneSave.stringDictionary = new Dictionary<string, string>();// Add values to the int dictioanrysceneSave.intDictionary.Add("gameYear", gameYear);sceneSave.intDictionary.Add("gameDay", gameDay);sceneSave.intDictionary.Add("gameHour", gameHour);sceneSave.intDictionary.Add("gameMinute", gameMinute);sceneSave.intDictionary.Add("gameSecond", gameSecond);// Add values to the string dictionarysceneSave.stringDictionary.Add("gameDayOfWeek", gameDayOfWeek);sceneSave.stringDictionary.Add("gameSeason", gameSeason.ToString());// Add scene save to game object for persistent sceneGameObjectSave.sceneData.Add(Settings.PersistentScene, sceneSave);return GameObjectSave;}public void ISaveableLoad(GameSave gameSave){// Get saved gameobject from gameSave dataif(gameSave.gameObjectData.TryGetValue(ISaveableUniqueID, out GameObjectSave gameObjectSave)){GameObjectSave = gameObjectSave;// Get savedscene data for gameObjectif(GameObjectSave.sceneData.TryGetValue(Settings.PersistentScene, out SceneSave sceneSave)){// if int and string dictionaries are foundif(sceneSave.intDictionary != null && sceneSave.stringDictionary != null){// populate saved int valuesif(sceneSave.intDictionary.TryGetValue("gameYear", out int savedGameYear)){gameYear = savedGameYear;}if(sceneSave.intDictionary.TryGetValue("gameDay", out int savedGameDay)){gameDay = savedGameDay;}if(sceneSave.intDictionary.TryGetValue("gameHour", out int savedGameHour)){gameHour = savedGameHour;}if(sceneSave.intDictionary.TryGetValue("gameMinute", out int savedGameMinute)){gameMinute = savedGameMinute;}if(sceneSave.intDictionary.TryGetValue("gameSecond", out int savedGameSecond)){gameSecond = savedGameSecond;}// populate string saved valuesif(sceneSave.stringDictionary.TryGetValue("gameDayOfWeek", out string savedGameDayOfWeek)){gameDayOfWeek = savedGameDayOfWeek;}if(sceneSave.stringDictionary.TryGetValue("gameSeason", out string savedGameSeason)){if(Enum.TryParse<Season>(savedGameSeason, out Season season)){gameSeason = season;}}// Zero gametickgameTick = 0f;// Trigger advance minute eventEventHandler.CallAdvanceGameMinuteEvent(gameYear, gameSeason, gameDay, gameDayOfWeek, gameHour, gameMinute, gameSecond);// Refresh game clock}}}}public void ISaveableStoreScene(string sceneName){// Nothing required here since Time Manager is running on the persistent scene}public void ISaveableRestoreScene(string sceneName){// Nothing required here since Time Manager is running on the persistent scene}

5、运行游戏

运行游戏并进行相应操作,过去了一段时间,然后save game。

重启游戏后load game,时间恢复到重启前的数据。

相关文章:

Unity3D仿星露谷物语开发58之保存时钟信息到文件

1、目标 保存当前的时钟信息到文件中。 2、修改TimeManager对象 TimeManager对象添加组件&#xff1a;Generate GUID 3、修改SceneSave.cs脚本 添加1行代码&#xff1a; 4、修改TimeManager.cs脚本 添加&#xff1a; using System; 修改TimeManager类&#xff1a; 添加属…...

lstm 长短期记忆 视频截图 kaggle示例

【官方双语】LSTM&#xff08;长短期记忆神经网络&#xff09;最简单清晰的解释来了&#xff01;_哔哩哔哩_bilibili . [short,input]*[2.7,1.63]b5.95 换参数和激活函数 tan激活函数输出带正负符号的百分比 tanx公式长这样&#xff1f; 潜在短期记忆 前几天都是乱预测&#xf…...

Spring Advisor增强规则实现原理介绍

Spring Advisor增强规则实现原理介绍 一、什么是 Advisor&#xff1f;1. Advisor 的定义与本质接口定义&#xff1a; 2. Advisor 的核心作用统一封装切点与通知构建拦截器链的基础实现增强逻辑的灵活组合 二. Sprin当中的实现逻辑1 Advisor 接口定义2 PointcutAdvisor 接口定义…...

【HarmonyOS 5】鸿蒙中的UIAbility详解(二)

【HarmonyOS 5】鸿蒙中的UIAbility详解&#xff08;二&#xff09; 一、前言 今天我们继续深入讲解UIAbility&#xff0c;根据下图可知&#xff0c;在鸿蒙中UIAbility继承于Ability&#xff0c;开发者无法直接继承Ability。只能使用其两个子类&#xff1a;UIAbility和Extensi…...

力扣HOT100之动态规划:152. 乘积最大子数组

这道题并不是代码随想录里的&#xff0c;我试着用动规五部曲来做&#xff0c;然后不能通过全部测试样例&#xff0c;在第109个测试样例卡住了&#xff0c;如下所示。 原因是可能负数乘以负数会得到最大的乘积&#xff0c;不能单纯地用上一个序列的最大值乘以当前值来判断是否能…...

Java后端技术栈问题排查实战:Spring Boot启动慢、Redis缓存击穿与Kafka消费堆积

Java后端技术栈问题排查实战&#xff1a;Spring Boot启动慢、Redis缓存击穿与Kafka消费堆积 引言 在现代互联网大厂中&#xff0c;Java后端系统因为其复杂性和多样性&#xff0c;常常面临各种问题和挑战。从核心语言到微服务架构&#xff0c;从数据库到缓存&#xff0c;不同层…...

定制开发开源AI智能名片S2B2C商城小程序:数字营销时代的话语权重构

摘要&#xff1a;在数据驱动的数字营销时代&#xff0c;企业营销话语权正从传统媒体向掌握用户数据与技术的平台转移。本文基于“数据即权力”的核心逻辑&#xff0c;分析定制开发开源AI智能名片S2B2C商城小程序如何通过技术赋能、场景重构与生态协同&#xff0c;帮助企业重构营…...

【面试 - 遇到的问题 - 优化 - 地图】腾讯地图轨迹回放 - 回放的轨迹时间要和现实时间对应(非匀速)

目录 背景轨迹回放 - 匀速效果图TrackPlaybackDialog.vue 代码TMapNew.vue 代码 轨迹回放 - 非匀速效果图TrackPlaybackDialog.vue 代码TMapNew.vue 代码 背景 腾讯地图轨迹回放是匀速回放的&#xff0c;但是客户要求根据现实时间&#xff0c;什么时间点在某个点位 【腾讯地图轨…...

ffmpeg baidu

ffmpeg -list_devices true -f dshow -i dummy 获取你的音频输入设备&#xff08;麦克风&#xff09;名称 输出中可以看到你有如下两个可用麦克风设备&#xff1a; “麦克风阵列 (适用于数字麦克风的英特尔 智音技术)” “外部麦克风 (Realtek Audio)” &#xff08;注意&…...

spring boot 拦截器HandlerInterceptor 不生效的原因排查

public class UserInterceptor implements HandlerInterceptor项目添加一个拦截器&#xff0c;发现未生效 1、排查拦截本身是否注入了springbean 容器 Slf4j Component public class LoginInterceptor implements HandlerInterceptor {2、排查springboot 项目扫描范围是否包含…...

公网ip怎么申请和使用?本地只有内网IP如何提供外网访问?

在当今的网络时代&#xff0c;许多程序和服务都依赖于公网地址——用于标识设备在互联网位置的全球唯一标识符。例如&#xff0c;办公网站、FTP服务器或游戏服务器等需要借助公网IP来确保用户可以访问。故此准确获取公网IP地址显得尤为重要。 在大多家庭和企业网络中&#xff…...

将git最后一次提交把涉及到的文件按原来目录结构提取出来

文章目录 前言一、将git最后一次提交把涉及到的文件按原来目录结构提取出来 前言 将git最后一次的提交提取出来&#xff0c;涉及到的目录结构以及文件等&#xff0c;按原本的目录结构复制输出。并输出相关的补丁。 一、将git最后一次提交把涉及到的文件按原来目录结构提取出来…...

利用计算机模拟和玉米壳废料开发新型抗病毒药物合成方法

参阅&#xff1a;Top 创新大奖 这个课题将农业废弃物资源化利用、计算机辅助药物设计和绿色化学完美结合&#xff0c;是一个极具创新性和应用前景的研究方向&#xff01; 以下是如何利用计算机模拟和玉米壳废料开发新型抗病毒药物合成方法的系统思路&#xff1a; 核心思路 玉…...

【Docker】存储卷

【简介】 宿主机的某一目录与容器中的某一目录建立的一种绑定关系&#xff0c;这就是“存储卷” 它有三个特性 1.它可以绕过联合文件系统&#xff0c; 直接作用于宿主机的目录 2.容器和宿主机的这一绑定关系指向了同一目录&#xff0c; 因此两个目录之间的数据是同步的&#xf…...

Python 爬虫工具 BeautifulSoup

文章目录 1. BeautifulSoup 概述1.1. 安装 2. 对象的种类2.1. BeautifulSoup2.2. NavigableString&#xff08;字符串&#xff09;2.3. Comment2.4. Tag2.4.1. 获取标签的名称2.4.2. 获取标签的属性2.4.3. 获取标签的内容2.4.3.1. tag.string2.4.3.2. tag.strings2.4.3.3. tag.…...

WPF的布局核心:网格布局(Grid)

网格布局&#xff08;Grid&#xff09; 1 行列定义&#xff08;RowDefinitions & ColumnDefinitions&#xff09;2 Grid.Row和Grid.Column3 跨行跨列&#xff08;Grid.RowSpan & Grid.ColumnSpan&#xff09;3.1垂直跨行3.2水平跨列3.3综合应用案例 4 高级布局技巧4.1共…...

OpenCV图像认知(二)

形态学变换&#xff1a; 核&#xff1a; 核&#xff08;kernel&#xff09;其实就是一个小区域&#xff0c;通常为3*3、5*5、7*7大小&#xff0c;有着其自己的结构&#xff0c;比如矩形结构、椭圆结构、十字形结构&#xff0c;如下图所示。通过不同的结构可以对不同特征的图像…...

大数据与数据分析【数据分析全栈攻略:爬虫+处理+可视化+报告】

- 第 100 篇 - Date: 2025 - 05 - 25 Author: 郑龙浩/仟墨 大数据与数据分析 文章目录 大数据与数据分析一 大数据是什么&#xff1f;1 定义2 大数据的来源3 大数据4个方面的典型特征&#xff08;4V&#xff09;4 大数据的应用领域5 数据分析工具6 数据是五种生产要素之一 二 …...

t015-预报名管理系统设计与实现 【含源码!!!】

项目演示地址 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装预报名管理系统软件来发挥其高效地信息处理的…...

LLM中的Loss与Logits详解

LLM中的Loss与Logits详解 自己构建的logits的损失函数,比自带loss效果好很多,建议自己构建; 另外学习率也是十分重要的参数,多次尝试,通过查看loss的下降趋势进行调整; 举例,来回跳跃说明下降率过大,一般从0.0001 开始尝试。 在深度学习中,logits 和 loss 是两个不…...

数学术语之源——绝对值(absolute value)(复数模?)

目录 1. 绝对值&#xff1a;(absolute value): 2. 复数尺度(复尺度)&#xff1a;(modulus): 1. 绝对值&#xff1a;(absolute value): 一个实数的绝对值是其不考虑(irrespective)符号的大小(magnitude)。在拉丁语中具有相同意思的单词是“modulus”&#xff0c;这个单词还…...

亚马逊商品评论爬取与情感分析:Python+BeautifulSoup实战(含防封策略)

一、数据爬取模块&#xff08;Python示例&#xff09; import requests from bs4 import BeautifulSoup import pandas as pd import timeheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36,Accept-Language: en-US }def scrape_amazon_re…...

STM32的DMA入门指南:让单片机学会“自动搬运“数据

STM32的DMA入门指南&#xff1a;让单片机学会"自动搬运"数据 引言&#xff1a;CPU的烦恼 想象你是一个快递分拣员&#xff0c;每天要手动把成千上万的包裹从卡车搬到仓库。这时候如果有个自动传送带能帮你完成搬运工作&#xff0c;你就可以专心处理更重要的订单核对…...

从虚拟化到云原生与Serverless

操作系统课程&#xff1a;从虚拟化到云原生与Serverless 大家好&#xff0c;我是你们的操作系统课程老师&#xff01;今天我们将从虚拟化技术讲到现代的云原生和Serverless架构&#xff0c;带你看看计算机系统如何从早期的虚拟机&#xff08;VM&#xff09;演进到容器&#xf…...

OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局

【AI安全警钟再响&#xff0c;这次主角竟是OpenAI&#xff1f;】 当全球AI圈还在为Claude 4的“乖巧”欢呼时&#xff0c;OpenAI最新模型o3却以一场惊心动魄的“叛逃”测试引爆舆论——在100次关机指令测试中&#xff0c;o3竟7次突破安全防护&#xff0c;甚至篡改底层代码阻止系…...

Bootstrap:精通级教程(VIP10万字版)

一、网格系统:实现复杂响应式布局 I. 引言 在现代 Web 开发领域,构建具有视觉吸引力、功能完善且能在多种设备和屏幕尺寸上无缝运行的响应式布局至关重要。Bootstrap 作为业界领先的前端框架,其核心的网格系统为开发者提供了强大而灵活的工具集,用以高效创建复杂的响应式…...

技术创新如何赋能音视频直播行业?

在全球音视频直播行业的快速发展中&#xff0c;技术的持续创新始终是推动行业进步的核心动力。作为大牛直播SDK的开发者&#xff0c;我很荣幸能分享我们公司如何从产品的维度出发&#xff0c;精准把握市场需求&#xff0c;并不断推动产品的发展&#xff0c;以满足不断变化的行业…...

leetcode1201. 丑数 III -medium

1 题目&#xff1a;1201. 丑数 III. 官方标定难度&#xff1a;中 丑数是可以被 a 或 b 或 c 整除的 正整数 。 给你四个整数&#xff1a;n 、a 、b 、c &#xff0c;请你设计一个算法来找出第 n 个丑数。 示例 1&#xff1a; 输入&#xff1a;n 3, a 2, b 3, c 5 输出…...

ai工具集:AI材料星ppt生成,让你的演示更出彩

在当今快节奏的工作环境中&#xff0c;制作一份专业、美观的 PPT 是展示工作成果、传递信息的重要方式。与此同时&#xff0c;制作PPT简直各行各业的“职场噩梦”&#xff0c;很多人常常熬夜到凌晨3点才能完成&#xff0c;累到怀疑人生。 现在&#xff1f;完全不一样了&#x…...

@Prometheus 监控操作系统-Exporter(Win Linux)

文章目录 Prometheus 监控操作系统(Win&Linux)-Exporter1. 概述2. Linux 系统监控 (Node Exporter)2.1 下载 Node Exporter2.2 创建 Systemd 服务2.3 启动服务2.4 验证安装 3. Windows 系统监控 (Windows Exporter)3.1 下载 Windows Exporter3.2 安装选项3.3 验证安装3.4 防…...