Notifications
Article
【UnityTips】给 Unity 加上自动保存功能 🤪
Published 6 months ago
901
7
😣 项目老崩,来个自动保存加上保险吧 (文末附送代码)

前言 🤦‍♂️

自己比较喜欢瞎折腾导致一直稳如泰山的 Unity 最近也开始出现崩溃问题了,所以就有了下面的故事。

需求分析 💡


  1. 代码在 IDE 中打开与 Unity 无关,无需关注代码保存。
  2. 大部分时间都在写代码,不需要定时保存。
  3. 崩溃多发生在运行时候,需要在运行模式开始前保存。
  4. 需要一个开关来控制是否开启自动保存。

编码 ⌨

先在 Editor 文件夹下创建一个脚本,命名为 AutoSave
然后开始编辑 :
先创建俩个字符串,用来保存俩个功能按钮的路径 :( 这里涉及到编辑器插件开发,大家可以先补补课 )
public static class AutoSaveOnRun { // 开启 private const string MenuNameOn = "EasyTool/Auto Save/On"; // 关闭 private const string MenuNameOff = "EasyTool/Auto Save/Off"; }
接下来写一个用来保存场景的函数 :
public static class AutoSaveOnRun { private const string MenuNameOn = "EasyTool/Auto Save/On"; private const string MenuNameOff = "EasyTool/Auto Save/Off"; // 用来保存场景的关键函数 private static void AutoSave(PlayModeStateChange state) { // 判断编辑器是否正要进入运行模式 if (EditorApplication.isPlayingOrWillChangePlaymode && !EditorApplication.isPlaying) { // 保存当前打开的场景 EditorSceneManager.SaveOpenScenes(); AssetDatabase.SaveAssets(); // 输出信息方便查看 Debug.Log("保存成功"); } } }
然后来使用 MenuItem 属性来将这俩个方法添加到编辑器菜单栏,同时将 AutoSave 方法添加到 EditorApplication.playModeStateChanged 中,这样可以在每次编辑器模式改变时触发保存函数。反之则可以关闭自动保存功能。
学习常用属性可以看看我的这篇分享 : https://connect.unity.com/p/2019-x-chang-yong-shu-xing-attribute-jie-xi
public static class AutoSaveOnRun { private const string MenuNameOn = "EasyTool/Auto Save/On"; private const string MenuNameOff = "EasyTool/Auto Save/Off"; [MenuItem(MenuNameOn)] private static void AutoSaveOn() { // 在编辑器模式改变时,触发 AutoSave 方法 EditorApplication.playModeStateChanged += AutoSave; Debug.Log("开启自动保存"); } [MenuItem(MenuNameOff)] private static void AutoSaveOff() { // 删除触发事件 EditorApplication.playModeStateChanged -= AutoSave; Debug.Log("关闭自动保存"); } }

最终效果 🧐


可以看到我开启了 Clear on Play 功能,但是保存成功的提示是在之前便弹出了,到这里我们的所有功能全部实现啦~。 ✔
代码:(手机端看不到,请用PC端查看附件)
超级汽水
超级热爱 - Student
14
Comments
Shelton
6 months ago
初级程序员
yc这个脚本第一次选择 EasyTool/Auto Save/On后 自动保存 可以保存成功,当停止了再点播放就不能保存。又要重新选择 EasyTool/Auto Save/On后,再运行才能保存。
好像是这样子的
0
y
yc
6 months ago
超级汽水你把它放在 Editor 文件夹下了吗 ? 我这边是没问题的
是放在Editor的,第一次是当按下Play时,是,没问题,可以保存,并打印出来,显示保存成功!然后,当第二按下play时,就没反应,不打印!
0
超级汽水
6 months ago
超级热爱
yc这个脚本第一次选择 EasyTool/Auto Save/On后 自动保存 可以保存成功,当停止了再点播放就不能保存。又要重新选择 EasyTool/Auto Save/On后,再运行才能保存。
你把它放在 Editor 文件夹下了吗 ? 我这边是没问题的
0
y
yc
6 months ago
这个脚本第一次选择 EasyTool/Auto Save/On后 自动保存 可以保存成功,当停止了再点播放就不能保存。又要重新选择 EasyTool/Auto Save/On后,再运行才能保存。
0
Shelton
6 months ago
初级程序员
Shelton 同时将 AutoSave 方法添加到 EditorApplication.playModeStateChanged 中
这个怎么操作啊
0