Unity插件研究院之自动保存场景

原文: http://wiki.unity3d.com/index.php?title=AutoSave 

最近发现Unity老有自动崩溃的BUG。 每次崩溃的时候由于项目没有保存所以Hierarchy视图游戏对象与游戏资源的关系就会丢失。所以想到自动保存场景。 
本来想自己写一个这样的脚本,但是发现维基百科上已经有了。。。

01 using UnityEngine;
02 using UnityEditor;
03 using System;
04  
05 public class AutoSave : EditorWindow {
06  
07     private bool autoSaveScene = true;
08     private bool showMessage = true;
09     private bool isStarted = false;
10     private int intervalScene;
11     private DateTime lastSaveTimeScene = DateTime.Now;
12  
13     private string projectPath = Application.dataPath;
14     private string scenePath;
15  
16     [MenuItem ("Window/AutoSave")]
17     static void Init () {
18         AutoSave saveWindow = (AutoSave)EditorWindow.GetWindow (typeof (AutoSave));
19         saveWindow.Show();
20     }
21  
22     void OnGUI () {
23         GUILayout.Label ("Info:", EditorStyles.boldLabel);
24         EditorGUILayout.LabelField ("Saving to:"""+projectPath);
25         EditorGUILayout.LabelField ("Saving scene:"""+scenePath);
26         GUILayout.Label ("Options:", EditorStyles.boldLabel);
27         autoSaveScene = EditorGUILayout.BeginToggleGroup ("Auto save", autoSaveScene);
28         intervalScene = EditorGUILayout.IntSlider ("Interval (minutes)", intervalScene, 1, 10);
29         if(isStarted) {
30             EditorGUILayout.LabelField ("Last save:"""+lastSaveTimeScene);
31         }
32         EditorGUILayout.EndToggleGroup();
33         showMessage = EditorGUILayout.BeginToggleGroup ("Show Message", showMessage);
34         EditorGUILayout.EndToggleGroup ();
35     }
36  
37     void Update(){
38         scenePath = EditorApplication.currentScene;
39         if(autoSaveScene) {
40             if(DateTime.Now.Minute >= (lastSaveTimeScene.Minute+intervalScene) || DateTime.Now.Minute == 59 && DateTime.Now.Second == 59){
41                 saveScene();
42             }
43         else {
44             isStarted = false;
45         }
46  
47     }
48  
49     void saveScene() {
50         EditorApplication.SaveScene(scenePath);
51         lastSaveTimeScene = DateTime.Now;
52         isStarted = true;
53         if(showMessage){
54             Debug.Log("AutoSave saved: "+scenePath+" on "+lastSaveTimeScene);
55         }
56         AutoSave repaintSaveWindow = (AutoSave)EditorWindow.GetWindow (typeof (AutoSave));
57         repaintSaveWindow.Repaint();
58     }
59 }

 

因为这个编辑窗口必须在激活状态,所以 你可以把它附属在某个窗口下面 比如Project视图。

 

2_320_a155bad1a281d9f

 

 

  为了方便你还可以把这个布局保存起来,方便下次使用。。

 

2_320_53108826434864f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值