Описание
Это свойство указывает, будет ли редактор предлагать пользователю сохранить или отменить несохраненные изменения перед закрытием окна.
Установите для параметра hasUnsavedChanges значение true, чтобы пользователю было предложено сохранить или отменить несохраненные изменения. Это помогает предотвратить случайную потерю несохраненной работы. При использовании hasUnsavedChanges необходимо также использовать EditorWindow.saveChangesMessage и переопределить EditorWindow.SaveChanges и/или EditorWindow.DiscardChanges. Когда параметр hasUnsavedChanges включен, строка заголовка и закрепленные вкладки обновляются, указывая, что пользователю необходимо сохранить свою работу. Если пользователь закрывает окно без сохранения, появляется окно сообщения с предложением сохранить, отменить изменения или отменить их.
// Пример C#
// Скрипт, демонстрирующий API несохраненных изменений
using UnityEngine;
using UnityEditor;
public class UnsavedChangesExampleWindow : EditorWindow
{
[MenuItem("Example/Editor Window With Unsaved Changes")]
static void Init()
{
UnsavedChangesExampleWindow window = (UnsavedChangesExampleWindow)EditorWindow.GetWindowWithRect(typeof(UnsavedChangesExampleWindow), new Rect(100, 100, 400, 400));
window.saveChangesMessage = "This window has unsaved changes. Would you like to save?";
window.Show();
}
void OnGUI()
{
saveChangesMessage = EditorGUILayout.TextField(saveChangesMessage);
EditorGUILayout.LabelField(hasUnsavedChanges ? "I have changes!" : "No changes.", EditorStyles.wordWrappedLabel);
EditorGUILayout.LabelField("Try to close the window.");
using (new EditorGUI.DisabledScope(hasUnsavedChanges))
{
if (GUILayout.Button("Create unsaved changes"))
hasUnsavedChanges = true;
}
using (new EditorGUI.DisabledScope(!hasUnsavedChanges))
{
if (GUILayout.Button("Save"))
SaveChanges();
if (GUILayout.Button("Discard"))
DiscardChanges();
}
}
public override void SaveChanges()
{
// Your custom save procedures here
Debug.Log($"{this} saved successfully!!!");
base.SaveChanges();
}
public override void DiscardChanges()
{
// Your custom procedures to discard changes
Debug.Log($"{this} discarded changes!!!");
base.DiscardChanges();
}
}