关于游戏中的自动保存功能
大量的线性故事类型游戏使用了自动存档功能增强玩家游戏体验的连续性和沉浸感,玩家在经过自动存档点后触发自动保存功能,跳出自动保存图标并在不打断游玩的情况下对此刻游戏场景中的数据进行快照保存,待玩家死亡后还原存档时的场景情况。
那么在Unity中该如何实现这个功能呢?
笔者发现大名鼎鼎的数据存储插件Easy Save 3 插件就附带了这个功能,更棒的是这个功能非常简单易用!
PS:没有用过这个插件的小伙伴可以看商店页面介绍(打折时候的价格绝对物超所值),笔者已经用这个插件代替自己写的数据存储系统了(自己的白写了 T-T)
此篇文章笔者主要介绍Auto Save功能的使用,主体功能可以参考官网链接学习(其实更简单)
基础功能演示
1.购买并在工程中导入插件
2.打开Window > Easy Save 3 > Auto Save,点击Enable Auto Save for this scene按钮在场景中生成Easy Save 3 Manager对象
3.创建一个Cube放在(0,0,0)位置,打开Window > Easy Save 3 > Auto Save,你会发现场景中的所有对象都在列表中,选中Cube下拉栏勾选Cube(Transform)项,关闭页面
4.运行场景,随意移动Cube到其他位置,停止场景运行
5.再次运行场景,我们发现Cube出现在了第4步移动到的位置上,检查点功能成功运行
以上就是Auto Save基础功能的演示,详细功能说明可以看AutoSave功能官方说明。
使用指南
接下来是笔者在实际项目中使用碰到的一些问题的解决方法
如何在游戏过程中调用自动存档?
可以在主角必经的点上设置自动保存触发区域,达到以后调用ES3AutoSaveMgr.Current.Save()触发自动存档,也可以通过计时器在时间到达后触发自动存档。
如何细化需要存储的快照数据?
点击齿轮图标可以进入脚本数据存储页,勾选实际需要存储的数据,减少无效数据的存储,加快存储速度,减少存档大小。
如何在读档后还原敌人的状态?
敌人的数据可以通过脚本进行快照,可是实时运行的Animator数据插件是不支持快照存储的,并且插件也没有提供回档以后的回调函数,笔者的方法是通过AI数据的数据恢复使角色行为跳回初始行为,在初始行为中进行Animator实时数据的还原使角色恢复到存储时的动画状态,小伙伴们可以用这个思路在自己的AI系统中还原角色动画
存档时的卡顿问题
因为此功能在主线程进行数据写入,所以在存储时游戏会出现轻微卡顿问题,由于存储时需要读取GameObject数据,并且这些数据必须要在主线程读取,所以无法使用多线程在后台处理数据存储,目前只能通过尽量减少保存的数据量减少卡顿,小伙伴们有能力的话可以研究一下多线程版本怎么实现。
暂无关于此日志的评论。