У меня есть префаб, содержащий скрипт с настраиваемым редактором. Затем префаб изменяется в сцене, включая сам скрипт.
Я хочу, чтобы измененные переменные скрипта были выделены жирным шрифтом, например:
Но вместо этого переменная, измененная вне префаба, выглядит так же, как и любые другие (неизмененные) переменные. Я пробовал использовать Undo.RecordObject
и EditorUtility.SetDirty
, но безуспешно. Возможно, здесь есть что-то, что я пропустил, например, что я должен был позвонить или порядок строк?
Я безуспешно искал и тестировал скрипты часами, было бы здорово, если бы кто-нибудь мог сообщить что я делал неправильно.
Скрипт редактора выглядит следующим образом:
using UnityEditor;
using UnityEngine;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;
[CustomEditor (typeof (MyScript))]
[CanEditMultipleObjects]
public class MyScriptEditor : Editor {
SerializedProperty usePanel, [...], equalHints;
protected virtual void OnEnable () {
setvars ();
}
void setvars () {
usePanel = serializedObject.FindProperty ("usePanel");
// ...and more variables...
equalHints = serializedObject.FindProperty ("equalHints");
MyScript s = (MyScript) target;
Undo.RecordObject (s, "test");
}
public override void OnInspectorGUI () {
if (usePanel.Equals (null)) setvars ();
MyScript s = (MyScript) target;
if (GUI.changed) {
EditorUtility.SetDirty (s); // <--- this was one of my attempts
EditorSceneManager.MarkSceneDirty (SceneManager.GetActiveScene ());
}
usePanel.boolValue = EditorGUILayout.Toggle ("Use Panel", usePanel.boolValue);
// some more lines of code here
if (equalHints.boolValue) {
// do some stuff
}
this.serializedObject.ApplyModifiedProperties ();
}
}