EditorWindow.hasUnsavedChanges
Declaration
public bool hasUnsavedChanges;Описание
Это свойство определяет, будет ли Редактор предлагать пользователю сохранить или отбросить несохраненные изменения перед закрытием окна.
Установите hasUnsavedChanges в true, чтобы попросить пользователя сохранить или отбросить несохранённые изменения. Это помогает предотвратить случайную потерю несохранённой работы. При использовании hasUnsavedChanges необходимо также использовать EditorWindow.saveChangesMessage, and override the EditorWindow.SaveChanges и/или EditorWindow.DiscardChanges методы. Когда hasUnsavedChanges включено, заголовочная строка и пришвартованные вкладки обновляются, указывая, что пользователь должен сохранить свою работу. Если пользователь закрывает окно без сохранения, появляется окно сообщения, предлагающее сохранить, отбросить изменения или отменить.
using UnityEngine; using UnityEditor; using UnityEngine.UIElements; public class UnsavedChangesExampleWindow : EditorWindow { [MenuItem("Examples/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 CreateGUI() { var label = new Label(); label.text = hasUnsavedChanges ? "I have changes!" : "No changes."; rootVisualElement.Add(label); var buttonCreate = new Button(); buttonCreate.text = "Create unsaved changes"; buttonCreate.clicked += () => { hasUnsavedChanges = true; Debug.Log($"{this} has unsaved changes!!!"); }; rootVisualElement.Add(buttonCreate); var buttonSave = new Button(); buttonSave.text = "Save"; buttonSave.clicked += () => SaveChanges(); rootVisualElement.Add(buttonSave); var buttonDiscard = new Button(); buttonDiscard.text = "Discard"; buttonDiscard.clicked += () => DiscardChanges(); rootVisualElement.Add(buttonDiscard); } 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(); } }