赞
踩
原文: http://wiki.unity3d.com/index.php?title=AutoSave
最近发现Unity老有自动崩溃的BUG。 每次崩溃的时候由于项目没有保存所以Hierarchy视图游戏对象与游戏资源的关系就会丢失。所以想到自动保存场景。
本来想自己写一个这样的脚本,但是发现维基百科上已经有了。。。
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视图。
为了方便你还可以把这个布局保存起来,方便下次使用。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。