Объявление
public void DiscardChanges();Описание
Отменяет несохраненные изменения содержимого окна.
Переопределите DiscardChanges() для удаления несохраненной работы при закрытии окна. Редактор вызывает этот метод внутри, когда пользователь закрывает окно. После того, как редактор вызывает этот метод, он предлагает пользователю отменить изменения. При переопределении этого метода вызовите базовую реализацию. В противном случае свойство EditorWindow.hasUnsavedChanges не сбрасывается в значение false. Обратите внимание: если у редактора есть несколько запросов пользователю отменить свои изменения, редактор вызовет этот метод как часть списка изменений, которые необходимо отменить. Если этот метод вызывает исключение, Unity отменяет процесс отмены для всех оставшихся запросов. В этом случае в диалоговом окне отображается сообщение об ошибке с сообщением об исключении.
// C# Example
// Script that demonstrates the unsaved changes 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();
}
}