纳金网

标题: Unity3D自动保存场景 [打印本页]

作者: 大大虾    时间: 2013-5-24 21:45
标题: Unity3D自动保存场景
由于Unity有自动崩溃的BUG每次崩溃的时候由于项目没有保存所以Hierarchy视图游戏对象与游戏资源的关系就会丢失,所以想到自动保存场景。(脚本来自维基百科)

  1. using UnityEngine;
  2. using UnityEditor;
  3. using System;
  4. public class AutoSave : EditorWindow {
  5.     private bool autoSaveScene = true;
  6.     private bool showMessage = true;
  7.     private bool isStarted = false;
  8.     private int intervalScene;
  9.     private DateTime lastSaveTimeScene = DateTime.Now;
  10.     private string projectPath = Application.dataPath;
  11.     private string scenePath;
  12.     [MenuItem ("Window/AutoSave")]
  13.     static void Init () {
  14.         AutoSave saveWindow = (AutoSave)EditorWindow.GetWindow (typeof (AutoSave));
  15.         saveWindow.Show();
  16.     }
  17.     void OnGUI () {
  18.         GUILayout.Label ("Info:", EditorStyles.boldLabel);
  19.         EditorGUILayout.LabelField ("Saving to:", ""+projectPath);
  20.         EditorGUILayout.LabelField ("Saving scene:", ""+scenePath);
  21.         GUILayout.Label ("Options:", EditorStyles.boldLabel);
  22.         autoSaveScene = EditorGUILayout.BeginToggleGroup ("Auto save", autoSaveScene);
  23.         intervalScene = EditorGUILayout.IntSlider ("Interval (minutes)", intervalScene, 1, 10);
  24.         if(isStarted) {
  25.             EditorGUILayout.LabelField ("Last save:", ""+lastSaveTimeScene);
  26.         }
  27.         EditorGUILayout.EndToggleGroup();
  28.         showMessage = EditorGUILayout.BeginToggleGroup ("Show Message", showMessage);
  29.         EditorGUILayout.EndToggleGroup ();
  30.     }
  31.     void Update(){
  32.         scenePath = EditorApplication.currentScene;
  33.         if(autoSaveScene) {
  34.             if(DateTime.Now.Minute >= (lastSaveTimeScene.Minute+intervalScene) || DateTime.Now.Minute == 59 && DateTime.Now.Second == 59){
  35.                 saveScene();
  36.             }
  37.         } else {
  38.             isStarted = false;
  39.         }
  40.     }
  41.     void saveScene() {
  42.         EditorApplication.SaveScene(scenePath);
  43.         lastSaveTimeScene = DateTime.Now;
  44.         isStarted = true;
  45.         if(showMessage){
  46.             Debug.Log("AutoSave saved: "+scenePath+" on "+lastSaveTimeScene);
  47.         }
  48.         AutoSave repaintSaveWindow = (AutoSave)EditorWindow.GetWindow (typeof (AutoSave));
  49.         repaintSaveWindow.Repaint();
  50.     }
  51. }
复制代码
因为这个编辑窗口必须在激活状态,所以 你可以把它附属在某个窗口下面 比如Project视图。


jjj.png

作者: 艾西格亚    时间: 2013-5-24 21:49
感谢分享这个脚本,很实用的功能!
作者: 大大虾    时间: 2013-5-24 22:02
艾西格亚 发表于 2013-5-24 21:49
感谢分享这个脚本,很实用的功能!

哈哈~~~天天看着老大你分享那么多好东西~我们也稍微做点力所能及贡献啊~~~
作者: 烟雨    时间: 2013-5-24 22:42
wow,这个不错的功能啊,解决了一些保存的问题,感谢楼主!
作者: u3dnew    时间: 2013-5-27 11:14
it is good
作者: spencergong    时间: 2013-5-27 15:32
it is good too
作者: 王者再临    时间: 2013-5-27 18:58
不错的脚本,学习了!
作者: sadrthhvq    时间: 2013-5-27 21:03
感谢分享
作者: may    时间: 2013-5-31 04:54
不错的功能,希望unity可以内建这样的东西
作者: 薄秋    时间: 2014-11-18 17:05
求教,我把脚本放在自建的Editor中没出来对应的窗口
作者: oelongeo    时间: 2014-11-18 21:31
顶一个! 非常实用的脚本




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5