public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { var sor = new SceneObjectReference(property); var origColor = GUI.color; if (!sor.ReferenceResolved) { label.text = "(Not resolved) " + label.text; GUI.color = Color.red; } label = EditorGUI.BeginProperty(position, label, property); position = EditorGUI.PrefixLabel(position, label); GUI.color = origColor; Object obj = sor.ReferencedObject; if (!sor.ReferenceResolved) { obj = sor.ReferenceScene; } EditorGUI.BeginChangeCheck(); var newObj = EditorGUI.ObjectField(position, obj, typeof(Object), true); if (EditorGUI.EndChangeCheck()) { sor.Update(newObj); } EditorGUI.EndProperty(); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { var sceneObjectReferenceProperty = property.FindPropertyRelative(k_SceneObjectReferencePath); var futureObjectReferenceProperty = property.FindPropertyRelative(k_FutureObjectReferencePath); var origColor = GUI.color; UnityObject obj; SceneObjectReference sceneObjectReference = null; if (futureObjectReferenceProperty.objectReferenceValue != null) { label.text = "(Future) " + label.text; GUI.color = Color.cyan; obj = futureObjectReferenceProperty.objectReferenceValue; } else { sceneObjectReference = new SceneObjectReference(sceneObjectReferenceProperty); if (!sceneObjectReference.ReferenceResolved) { label.text = "(Not resolved) " + label.text; GUI.color = Color.red; } obj = sceneObjectReference.ReferencedObject; if (!sceneObjectReference.ReferenceResolved) { obj = sceneObjectReference.ReferenceScene; } } label = EditorGUI.BeginProperty(position, label, property); position = EditorGUI.PrefixLabel(position, label); GUI.color = origColor; EditorGUI.BeginChangeCheck(); var newObj = EditorGUI.ObjectField(position, obj, typeof(Object), true); if (EditorGUI.EndChangeCheck()) { if (newObj is FutureObjectReference) { futureObjectReferenceProperty.objectReferenceValue = newObj; } else { futureObjectReferenceProperty.objectReferenceValue = null; if (sceneObjectReference == null) { sceneObjectReference = new SceneObjectReference(sceneObjectReferenceProperty); } sceneObjectReference.Update(newObj); } } EditorGUI.EndProperty(); }