49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEditor;
|
||
using UnityEditor.SceneManagement;
|
||
using UnityEngine;
|
||
|
||
[InitializeOnLoad]
|
||
public class AutoSaveBeforePlay
|
||
{
|
||
// 静态构造函数,在Unity编辑器启动时调用
|
||
static AutoSaveBeforePlay()
|
||
{
|
||
// 注册回调,当进入播放模式时触发
|
||
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
|
||
}
|
||
|
||
// 当播放模式状态发生变化时调用
|
||
private static void OnPlayModeStateChanged(PlayModeStateChange state)
|
||
{
|
||
// 如果即将进入播放模式且场景未保存,则保存场景
|
||
if (state == PlayModeStateChange.ExitingEditMode)
|
||
{
|
||
AutoSaveScene();
|
||
}
|
||
}
|
||
|
||
// 自动保存当前场景
|
||
private static void AutoSaveScene()
|
||
{
|
||
// 获取当前场景路径
|
||
string scenePath = UnityEngine.SceneManagement.SceneManager.GetActiveScene().path;
|
||
|
||
if (!string.IsNullOrEmpty(scenePath))
|
||
{
|
||
// 保存当前场景
|
||
EditorSceneManager.SaveScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene());
|
||
Debug.Log("Scene auto-saved before entering play mode: " + scenePath);
|
||
}
|
||
else
|
||
{
|
||
Debug.LogWarning("Scene is not saved. Please save the scene manually.");
|
||
}
|
||
|
||
// 保存所有的资产(如 prefabs、脚本等)
|
||
AssetDatabase.SaveAssets();
|
||
Debug.Log("All assets auto-saved.");
|
||
}
|
||
}
|