Editor.SaveChanges
Declaration
public void SaveChanges();Описание
Выполняет сохранение содержимого редактора.
Переопределить SaveChanges() при использовании свойств Editor.hasUnsavedChanges, чтобы пользователь не потерял несохраненную работу при закрытии окна. Редактор также вызывает этот метод внутри себя, когда пользователь закрывает окно. После вызова, Редактор просит пользователя сохранить изменения. При переопределении метода, обязательно вызовите базовую реализацию, иначе свойство Editor.hasUnsavedChanges не будет сброшено на false. Обратите внимание, что если Редактор имеет несколько запросов к пользователю о сохранении их изменений, Редактор будет вызывать этот метод как часть списка изменений, которые требуют сохранения. Unity отменяет процесс сохранения для всех оставшихся запросов, если этот метод вызывает исключение. В этом случае вы увидите сообщение об ошибке с сообщением об исключении, отображаемым в диалоговом окне.
using UnityEngine; using UnityEditor;
[CreateAssetMenu] public class UnsavedChangesExampleSO : ScriptableObject {}
[CustomEditor(typeof(UnsavedChangesExampleSO))] public class UnsavedChangesExampleEditor : UnityEditor.Editor { void OnEnable() { saveChangesMessage = "This editor has unsaved changes. Would you like to save?"; }
public override void OnInspectorGUI() { saveChangesMessage = EditorGUILayout.TextField(saveChangesMessage);
EditorGUILayout.LabelField(hasUnsavedChanges ? "I have changes!" : "No changes.", EditorStyles.wordWrappedLabel); EditorGUILayout.LabelField("Try to change selection.");
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(); } }