📜  unity reload 当前场景 - C# (1)

📅  最后修改于: 2023-12-03 15:20:52.245000             🧑  作者: Mango

Unity Reload 当前场景 - C#

在 Unity 中,有时候我们需要对场景进行修改,然后重新加载场景以预览修改后的效果。为了不必每次手动按下 File -> Save Scenes,然后再按下 File -> Open Scenes,我们可以利用 Unity 提供的 EditorApplication 类来编写一个脚本来实现自动重载场景的功能。

实现原理

利用 EditorApplication.delayCall 方法来延迟一段时间后执行代码,这样就可以等待 Unity 将当前修改保存到硬盘上。然后利用 EditorSceneManager.OpenScene 方法重新打开当前场景即可。

代码实现
using UnityEditor;
using UnityEngine.SceneManagement;

public class UnityReloadScene : Editor
{
    [MenuItem("Tools/Reload Current Scene _F5")]   // 定义快捷键为 F5
    static void ReloadCurrentScene()
    {
        // 延迟一帧后执行,确保当前场景修改已经成功保存
        EditorApplication.delayCall += () =>
        {
            var scenePath = SceneManager.GetActiveScene().path;
            EditorSceneManager.OpenScene(scenePath);
        };
    }
}
使用说明
  1. 将以上代码保存为 UnityReloadScene.cs
  2. 将该文件放在 Unity 项目中的 Editor 文件夹下(如果没有该文件夹,则需要手动创建);
  3. 在 Unity 编辑器中按下 Tools -> Reload Current Scene 即可重新加载当前场景。

注意:由于本脚本是利用 Unity 的编辑器功能实现的,所以只有在 Unity 编辑器中才能使用该功能,不能在发布的游戏中使用。