您的位置:首页 > 移动开发 > Unity3D

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

2016-02-19 23:19 567 查看
原文: http://wiki.unity3d.com/index.php?title=AutoSave

最近发现Unity老有自动崩溃的BUG。 每次崩溃的时候由于项目没有保存所以Hierarchy视图游戏对象与游戏资源的关系就会丢失。所以想到自动保存场景。

本来想自己写一个这样的脚本,但是发现维基百科上已经有了。。。


C#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

using
UnityEngine;

using
UnityEditor;

using
System;

public
class
AutoSave
:
EditorWindow
{

private
bool
autoSaveScene
=
true;

private
bool
showMessage
=
true;

private
bool
isStarted
=
false;

private
int
intervalScene;

private
DateTime
lastSaveTimeScene
=
DateTime.Now;

private
string
projectPath
=
Application.dataPath;

private
string
scenePath;

[MenuItem
("Window/AutoSave")]

static
void
Init
()
{

AutoSave
saveWindow
=
(AutoSave)EditorWindow.GetWindow
(typeof
(AutoSave));

saveWindow.Show();

}

void
OnGUI
()
{

GUILayout.Label
("Info:",
EditorStyles.boldLabel);

EditorGUILayout.LabelField
("Saving
to:",
""+projectPath);

EditorGUILayout.LabelField
("Saving
scene:",
""+scenePath);

GUILayout.Label
("Options:",
EditorStyles.boldLabel);

autoSaveScene
=
EditorGUILayout.BeginToggleGroup
("Auto
save",
autoSaveScene);

intervalScene
=
EditorGUILayout.IntSlider
("Interval
(minutes)",
intervalScene,
1,
10);

if(isStarted)
{

EditorGUILayout.LabelField
("Last
save:",
""+lastSaveTimeScene);

}

EditorGUILayout.EndToggleGroup();

showMessage
=
EditorGUILayout.BeginToggleGroup
("Show
Message",
showMessage);

EditorGUILayout.EndToggleGroup
();

}

void
Update(){

scenePath
=
EditorApplication.currentScene;

if(autoSaveScene)
{

if(DateTime.Now.Minute
>=
(lastSaveTimeScene.Minute+intervalScene)
||
DateTime.Now.Minute
==
59
&&
DateTime.Now.Second
==
59){

saveScene();

}

}
else
{

isStarted
=
false;

}

}

void
saveScene()
{

EditorApplication.SaveScene(scenePath);

lastSaveTimeScene
=
DateTime.Now;

isStarted
=
true;

if(showMessage){

Debug.Log("AutoSave
saved: "+scenePath+"
on "+lastSaveTimeScene);

}

AutoSave
repaintSaveWindow
=
(AutoSave)EditorWindow.GetWindow
(typeof
(AutoSave));

repaintSaveWindow.Repaint();

}

}

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





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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: