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

来源:互联网 发布:铁路货物追踪软件下载 编辑:程序博客网 时间:2024/06/06 15:24

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

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

01using UnityEngine;
02using UnityEditor;
03using System;
04 
05public 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

原创粉丝点击