防止保存 GameObject 上的更改
Prevent Changes on GameObject from being saved
我目前正在 Unity 中开发一个编辑器脚本,它可以在多场景设置中禁用特定的游戏对象,从而使编辑器的响应速度更快。我正在使用最多同时加载 4 个场景的设置。由于所有这些场景中都有许多游戏对象(我说的是数千甚至数万个对象),Unity 编辑器在加载这些场景时变得反应迟钝且使用起来很草率。播放和构建都很好,顺便说一句,它只是编辑器不可用。
所以我正在开发一个简单的编辑器工具,它会禁用所有加载场景中的特定父对象,以便编辑器再次可用。此工具工作正常,但我想阻止保存这些游戏对象的更改。我有意没有将 GameObjects 标记为 Dirty,因此当我禁用对象时 Unity 不会意识到。问题是,当我实际处理场景并保存我的工作时,禁用的游戏对象也会被保存,因为此时场景将被标记为脏。我已经研究过 HideFlags,但问题是,我不能让 Unity 只忽略对对象所做的更改。 HideFlags 只会阻止对象本身被保存,这不是我想要的。
如果有人知道一种让 Unity 忽略特定游戏对象更改的简单方法,那将非常有帮助:)
或者,我会对一种方式感兴趣,该方式使我能够在 Unity 保存场景时 运行 自定义代码。这样我就可以确保在 Unity 保存场景之前启用这些游戏对象。
提前致谢
不知道如何防止保存脏对象,怀疑是否可行,但是 运行 在 Unity 保存场景之前自定义代码 - 很容易。
示例编辑器脚本(记住它应该放在 Editor/
目录下以像任何其他编辑器脚本一样工作)
using UnityEditor;
[InitializeOnLoad]
static class EditorSceneManagerSceneSaved {
static EditorSceneManagerSceneSaved () {
UnityEditor.SceneManagement.EditorSceneManager.sceneSaving += OnSceneSaving;
}
static void OnSceneSaving (UnityEngine.SceneManagement.Scene scene, string path) {
UnityEngine.Debug.LogFormat ("Saving scene '{0}' to {1}", scene.name, path);
/* Do your magic here */
}
}
我目前正在 Unity 中开发一个编辑器脚本,它可以在多场景设置中禁用特定的游戏对象,从而使编辑器的响应速度更快。我正在使用最多同时加载 4 个场景的设置。由于所有这些场景中都有许多游戏对象(我说的是数千甚至数万个对象),Unity 编辑器在加载这些场景时变得反应迟钝且使用起来很草率。播放和构建都很好,顺便说一句,它只是编辑器不可用。 所以我正在开发一个简单的编辑器工具,它会禁用所有加载场景中的特定父对象,以便编辑器再次可用。此工具工作正常,但我想阻止保存这些游戏对象的更改。我有意没有将 GameObjects 标记为 Dirty,因此当我禁用对象时 Unity 不会意识到。问题是,当我实际处理场景并保存我的工作时,禁用的游戏对象也会被保存,因为此时场景将被标记为脏。我已经研究过 HideFlags,但问题是,我不能让 Unity 只忽略对对象所做的更改。 HideFlags 只会阻止对象本身被保存,这不是我想要的。
如果有人知道一种让 Unity 忽略特定游戏对象更改的简单方法,那将非常有帮助:)
或者,我会对一种方式感兴趣,该方式使我能够在 Unity 保存场景时 运行 自定义代码。这样我就可以确保在 Unity 保存场景之前启用这些游戏对象。
提前致谢
不知道如何防止保存脏对象,怀疑是否可行,但是 运行 在 Unity 保存场景之前自定义代码 - 很容易。
示例编辑器脚本(记住它应该放在 Editor/
目录下以像任何其他编辑器脚本一样工作)
using UnityEditor;
[InitializeOnLoad]
static class EditorSceneManagerSceneSaved {
static EditorSceneManagerSceneSaved () {
UnityEditor.SceneManagement.EditorSceneManager.sceneSaving += OnSceneSaving;
}
static void OnSceneSaving (UnityEngine.SceneManagement.Scene scene, string path) {
UnityEngine.Debug.LogFormat ("Saving scene '{0}' to {1}", scene.name, path);
/* Do your magic here */
}
}