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

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.xdnf.cn/news/10181.html

相关文章:

  • java 微服务中,微服务相互调用 feign 和flux 如何选择
  • 在 RK3588 上通过 VSCode 远程开发配置指南
  • 基础补充(扩展方法/协变)
  • 设计模式——建造者设计模式(创建型)
  • Spring Boot 自动参数校验
  • 基于大模型预测带状疱疹(无并发症)诊疗方案的研究报告
  • 基于图神经网络的自然语言处理:融合LangGraph与大型概念模型的情感分析实践
  • 每日c/c++题 备战蓝桥杯(P2240 【深基12.例1】部分背包问题)
  • Photoshop智能图层 vs 普通图层:核心差异与适用场景对比
  • 进程间通信(消息队列)
  • 11.21 LangGraph多轮对话系统实战:三步构建高效信息整理引擎,效率提升300%!
  • [9-3] 串口发送串口发送+接收 江协科技学习笔记(26个知识点)
  • STM32 串口通信①:USART 全面理解 + 代码详解
  • STL之vector
  • 前端面经 协商缓存和强缓存
  • 《数据结构初阶》【番外篇:二路归并的外排史诗】
  • Asp.Net Core SignalR的分布式部署
  • 力扣刷题(第四十三天)
  • AI书签管理工具开发全记录(七):页面编写与接口对接
  • 混沌映射(Chaotic Map)
  • MAC上怎么进入隐藏目录
  • leetcode216.组合总和III:回溯算法中多条件约束下的状态管理
  • 力扣HOT100之动态规划:300. 最长递增子序列
  • 【EF Core】 EF Core 批量操作的进化之路——从传统变更跟踪到无跟踪更新
  • 2024 CKA模拟系统制作 | Step-By-Step | 19、题目搭建-升级集群
  • PHP下实现RSA的加密,解密,加签和验签
  • 【leetcode】02.07. 链表相交
  • 大模型-attention汇总解析之-MLA
  • 循序渐进PersistentVolumes与PersistentVolumeClaim
  • shell管道笔记