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

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,时间恢复到重启前的数据。

相关文章:

  • IEEE P370:用于高达 50 GHz 互连的夹具设计和数据质量公制标准
  • 多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现
  • python学习day34
  • Asp.Net Core SignalR的协议协商问题
  • 2.1HarmonyOS NEXT开发工具链进阶:DevEco Studio深度实践
  • 自动驾驶系列—Monocular 3D Lane Detection for Autonomous Driving
  • “粽”览全局:分布式系统架构与实践深度解析(端午特别版)
  • 打卡day41
  • 2025-05-31 Python深度学习9——网络模型的加载与保存
  • Mybatis-Plus简单介绍
  • 深入探讨redis:主从复制
  • Flutter - 原生交互 - 相机Camera - 01
  • 快速掌握 GO 之 RabbitMQ
  • 【iOS】方法交换
  • c/c++的opencv车牌识别
  • MATLAB实现井字棋
  • 可灵2.1 vs Veo 3:AI视频生成谁更胜一筹?
  • matlab/simulink TLC语法基础练习实例
  • Java 数据处理 - 数值转不同进制的字符串(数值转十进制字符串、数值转二进制字符串、数值转八进制字符串、数值转十六进制字符串)
  • C++23 已移除特性解析
  • 推广软件排行榜前十名/搜索引擎优化的目标
  • 微商网站模板/培训体系
  • 网站 建设标准/优化电池充电什么意思
  • 长沙做模板网站/营销页面
  • 免费网站制作申请/品牌营销推广公司
  • 深圳广告公司联系方式电话/在线看seo网站