unity 删除物体前检查和自动保存场景
·
private static double totalTimer = 30;
private static bool isAutoSaveScene = false;
[MenuItem("Tools/OpenOrCloseAutoSaveScene")]
public static void OpenOrCloseAutoSaveScene()
{
isAutoSaveScene = !isAutoSaveScene;
if(isAutoSaveScene)
UpdateTotalTimer();
UnityEngine.Debug.Log("save scene : " + isAutoSaveScene.ToString());
}
[InitializeOnLoadMethod]//标记unity编辑器加载时调用该方法
static void OnCheck() {
System.Action OnEvent = delegate {
Event e = Event.current;//一些操作产生的事件,比如鼠标键盘等等
if (e != null && e.type == EventType.keyDown && e.keyCode == KeyCode.Delete) {
if (EditorApplication.isPlaying) return;
if (Selection.activeGameObject != null) {
if (EditorUtility.DisplayDialog("警告", "你将要删除的物体" + Selection.activeGameObject.name, "确定", "取消")) {
Undo.DestroyObjectImmediate(Selection.activeGameObject);//可撤销删除
}
e.Use();//删除事件,是其他的代码检测不到这个事件
}
}
};
//在hierarchy的OnGUI方法中添加事件监听
EditorApplication.hierarchyWindowItemOnGUI = delegate (int instanceID, Rect selectionRect) {
OnEvent();
};
EditorApplication.playmodeStateChanged = UpdateTotalTimer;
totalTimer += EditorApplication.timeSinceStartup;
//在unity编辑器的Update方法中检测时间
EditorApplication.update = delegate {
if (isAutoSaveScene && !EditorApplication.isPlaying) {
if(EditorApplication.timeSinceStartup >= totalTimer) {
UnityEngine.Debug.Log("save scene.");
//保存打开的场景
UnityEditor.SceneManagement.EditorSceneManager.SaveOpenScenes();
UpdateTotalTimer();
}
}
};
}
private static void UpdateTotalTimer() {
totalTimer = EditorApplication.timeSinceStartup + 30;
}
在unity开发中每隔30秒自动保存场景。
删除二次确认:可以在删除的时候检查某些删除是否会造成其他影响,根据自己的判断弹出二次确认即可。
最近发现一个新的写法,对一个类添加[ExecuteInEditMode]标识,可以让该类的方法在编辑器模式下也可以执行,例如想使用unity脚本函数Update,可以这么写,这样就比较简单了
using UnityEngine;
[ExecuteInEditMode]
public class TTTTT : MonoBehaviour
{
public void OnEnable()
{
}
private void OnDisable()
{
}
private void Update()
{
}
}
更多推荐


所有评论(0)