当前位置: 首页 > 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,时间恢复到重启前的数据。

http://www.lryc.cn/news/2393997.html

相关文章:

  • lstm 长短期记忆 视频截图 kaggle示例
  • Spring Advisor增强规则实现原理介绍
  • 【HarmonyOS 5】鸿蒙中的UIAbility详解(二)
  • 力扣HOT100之动态规划:152. 乘积最大子数组
  • Java后端技术栈问题排查实战:Spring Boot启动慢、Redis缓存击穿与Kafka消费堆积
  • 定制开发开源AI智能名片S2B2C商城小程序:数字营销时代的话语权重构
  • 【面试 - 遇到的问题 - 优化 - 地图】腾讯地图轨迹回放 - 回放的轨迹时间要和现实时间对应(非匀速)
  • ffmpeg baidu
  • spring boot 拦截器HandlerInterceptor 不生效的原因排查
  • 公网ip怎么申请和使用?本地只有内网IP如何提供外网访问?
  • 将git最后一次提交把涉及到的文件按原来目录结构提取出来
  • 利用计算机模拟和玉米壳废料开发新型抗病毒药物合成方法
  • 【Docker】存储卷
  • Python 爬虫工具 BeautifulSoup
  • WPF的布局核心:网格布局(Grid)
  • OpenCV图像认知(二)
  • 大数据与数据分析【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • t015-预报名管理系统设计与实现 【含源码!!!】
  • LLM中的Loss与Logits详解
  • 数学术语之源——绝对值(absolute value)(复数模?)
  • 亚马逊商品评论爬取与情感分析:Python+BeautifulSoup实战(含防封策略)
  • STM32的DMA入门指南:让单片机学会“自动搬运“数据
  • 从虚拟化到云原生与Serverless
  • OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局
  • Bootstrap:精通级教程(VIP10万字版)
  • 技术创新如何赋能音视频直播行业?
  • leetcode1201. 丑数 III -medium
  • ai工具集:AI材料星ppt生成,让你的演示更出彩
  • @Prometheus 监控操作系统-Exporter(Win Linux)
  • LINUX530 rsync定时同步 环境配置