unity 里面默认的组件和脚本发送修改后,场景上都会显示星号,表明有数据修改,需要保存。但是自己写的扩展编辑器修改数据后不显示星号,下次打开场景后数据会丢失。
Inspector 面板修改
需要在扩展面板方法里加上:
//当Inspector 面板发生变化时保存数据
if (GUI.changed)
{
EditorUtility.SetDirty(target);
}
serializedObject.ApplyModifiedProperties();
示例:
public override void OnInspectorGUI()
{
_yourScripts = target as YourScripts;
// ……
// 扩展编辑器的各种设定
// ……
//当Inspector 面板发生变化时保存数据
if (GUI.changed)
{
EditorUtility.SetDirty(target);
}
serializedObject.ApplyModifiedProperties();
}
实测,这种写法的缺点是无法撤销。
MenuItem 关联方法修改
在关联方法末尾添加
// MarkSceneDirty 方法:当通过扩展编辑器调用这个方法时视为修改场景,场景出现星号,可以保存
UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene());
示例:
[MenuItem("TOOLS/示例", false, 1)]
private static void OnInitScene()
{
// ……
// 实现的代码
// ……
// MarkSceneDirty 方法:当通过扩展编辑器调用这个方法时视为修改场景,场景出现星号,可以保存
UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene());
}
缺点也是不可撤销。