• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Dandecat

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

《Dandelion》中储存&读取机制的实现

        在游戏中储存与读取逻辑主要由管理脚本SaveManager与GameManager完成。

        将SaveManager与GameManager定义为Singleton,便于处理、防止冲突。

        SaveManager.cs:

        

   

  类SaveData为记录了场景中(scene)所有需要储存的GameObjects的必要信息,GameManager与SaveManager可以通过SaveData的内容完全还原场景状态。SaveFile则是SaveData的集合(5个),利用SaveFile游戏可以保存多个存档,让玩家选择性读取。

  

  

  由于SaveData是需要被序列化储存的内容,故添加[System.Serializable]属性。SaveObject主要包含的内容为一个BasicGOSI的Dictionary collection。其中索引变量int为相关Object(Component)的UniqueID,SaveManager利用UniqueID将储存数据(BasicGOSI以及其继承类)匹配到相应的Component。

  

  BasicGOSI是用于保存单个GameObject储存信息的base class。包含了最基本的GameObject储存信息,游戏中多数应用储存机制的脚本Component都将定义一个属于自己的继承与BasicGOSI的类,用于保存属于自己的独特的信息。

例如Butterfly component中定义的记录自己储存信息的类ButterflySI:

  

   游戏中用于生成与处理相关BasicGOSI与其继承类信息的为SaveObject类,需要利用储存机制的脚本要继承于SaveObject,例如Butterfly:

   

   SaveObject中定义了生成与处理BasicGOSI的函数,相关的继承类需要Override这些函数,仍以Butterfly为例:

  SaveObject.cs:

   

   

   其中PackSaveInfo功能为生成一个BasicGOSI并且将其添加到相应的SaveData中。ExtractSaveInfo的功能则为利用提供的BasicGOSI还原状态。

SaveManager的函数GenerateSaveData将调用每一个收集到的SaveObject的函数PackSaveInfo,并将其添加到新创建的SaveData中:

  SaveManager.cs:

  

   SaveObject包含一个int member “_uniqueID”,GameManager利用此int值寻找BasicGOSI所对应的场景中的Object。

   

   GameManager.cs:

   

  

  储存的过程为:由其他脚本调用SaveManager中的函数SaveCurrentScene(CheckArea),SaveCurrentScene将利用GenreateSaveObject生成一个包含当前场景储存信息的SaveData,并更新member “_saveFile”(添加新生成的SaveData后整理)。之后赋值并开启储存同步线程_saveThread。显示相关信息并结束。

SaveManager.cs:

   

  其中储存线程执行的函数WriteSaveDataToBinaryFile(string)的主要功能为将_saveFile object序列化之后储存到相应的磁盘位置下。

  SaveManager.cs:

    

  SaveManager利用BinaryFormatter进行序列化,注意的是SaveFile中的数据,即相关BasicGOSI以及继承类中包含的数据类型必须支持Serialization。对于一些不支持Serialization的数据类型,可以自定义SurrogateSelector的方式解决。例如Unity中不支持Serialization的Vector2,Vector3与Quaternion类型。

  SaveManager.cs:

  

  

posted on 2017-06-26 14:40  Dandecat  阅读(94)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3