public static void RevertPrefabPropertyOverride(object userData) { RuntimeSerializedProperty runtimeSerializedProperty = userData as RuntimeSerializedProperty; SerializedProperty serializedProperty = runtimeSerializedProperty.RuntimeSerializedObject.ParentProperty as SerializedProperty; if (serializedProperty == null) { Debug.LogError("Revert Value to Prefab is not supported on Nested Runtime Serialized Property!"); return; } int index; var parentProperty = serializedProperty.GetBelongArrayAndIndex(out index); if (index >= 0) { #if UNITY_2018_2_OR_NEWER Object prefab = PrefabUtility.GetCorrespondingObjectFromSource(parentProperty.serializedObject.targetObject); #else Object prefab = PrefabUtility.GetPrefabParent(parentProperty.serializedObject.targetObject); #endif SerializedObject serializedObject = new SerializedObject(prefab); SerializedProperty prop = serializedObject.FindProperty(parentProperty.propertyPath); parentProperty.arraySize = prop.arraySize; for (int i = 0; i < parentProperty.arraySize; i++) { var obj1 = RuntimeSerializedObjectCache.GetRuntimeSerializedObject(parentProperty.GetArrayElementAtIndex(i)); var obj2 = RuntimeSerializedObjectCache.GetRuntimeSerializedObject(prop.GetArrayElementAtIndex(i), RuntimeObject.FromJson(prop.GetArrayElementAtIndex(i).stringValue)); obj1.Target = obj2.Target; obj1.ForceReloadProperties(); } EditorUtilityHelper.ForceReloadInspectors(); } }
public static void PasteAllComponents(object userData) { SerializedProperty serializedProperty = userData as SerializedProperty; if (CanPaste(serializedProperty)) { List <string> pastedTypes = new List <string>(); for (int i = 0; i < serializedProperty.arraySize; i++) { var obj = RuntimeSerializedObjectCache.GetRuntimeSerializedObject(serializedProperty.GetArrayElementAtIndex(i)); if (Clipboard.ContainsKey(obj.Type)) { obj.Target = Clipboard[obj.Type].Target; obj.ForceReloadProperties(); pastedTypes.Add(obj.Type); } } foreach (var kvp in Clipboard) { if (pastedTypes.Contains(kvp.Key)) { continue; } serializedProperty.arraySize++; var prop = serializedProperty.GetArrayElementAtIndex(serializedProperty.arraySize - 1); var obj = RuntimeSerializedObjectCache.GetRuntimeSerializedObject(prop); obj.Target = Clipboard[obj.Type].Target; obj.ForceReloadProperties(); } EditorUtilityHelper.ForceReloadInspectors(); } }
public override float GetPropertyHeight(RuntimeSerializedProperty property, GUIContent label) { var height = 0f; if (string.IsNullOrEmpty(property.StringValue)) { height += EditorGUIUtility.singleLineHeight; } else { var runtimeSerializedObject = RuntimeSerializedObjectCache.GetRuntimeSerializedObject(property); height += GetRuntimeObjectHeight(runtimeSerializedObject); } return(height); }
public override void OnGUI(Rect position, RuntimeSerializedProperty property, GUIContent label) { if (string.IsNullOrEmpty(property.StringValue)) { var style = new GUIStyle(); style.richText = true; EditorGUI.LabelField(position, "<color=red>Missing</color>", style); } else { var runtimeSerializedObject = RuntimeSerializedObjectCache.GetRuntimeSerializedObject(property); DrawRuntimeObject(position, runtimeSerializedObject); runtimeSerializedObject.ApplyModifiedProperties(); } }
public static void CopyAllComponents(object userData) { SerializedProperty serializedProperty = userData as SerializedProperty; if (serializedProperty != null && serializedProperty.isArray && serializedProperty.arrayElementType == StringType) { Clipboard.Clear(); for (int i = 0; i < serializedProperty.arraySize; i++) { var obj = RuntimeSerializedObjectCache.GetRuntimeSerializedObject(serializedProperty.GetArrayElementAtIndex(i)); if (Clipboard.ContainsKey(obj.Type)) { Clipboard[obj.Type] = obj; } else { Clipboard.Add(obj.Type, obj); } } } }
public static void RevertPrefabPropertyOverride(object userData) { SerializedProperty parentProperty = userData as SerializedProperty; #if UNITY_2018_2_OR_NEWER Object prefab = PrefabUtility.GetCorrespondingObjectFromSource(parentProperty.serializedObject.targetObject); #else Object prefab = PrefabUtility.GetPrefabParent(parentProperty.serializedObject.targetObject); #endif SerializedObject serializedObject = new SerializedObject(prefab); SerializedProperty prop = serializedObject.FindProperty(parentProperty.propertyPath); parentProperty.arraySize = prop.arraySize; for (int i = 0; i < parentProperty.arraySize; i++) { var obj1 = RuntimeSerializedObjectCache.GetRuntimeSerializedObject(parentProperty.GetArrayElementAtIndex(i)); var obj2 = RuntimeSerializedObjectCache.GetRuntimeSerializedObject(prop.GetArrayElementAtIndex(i), RuntimeObject.FromJson(prop.GetArrayElementAtIndex(i).stringValue)); obj1.Target = obj2.Target; obj1.ForceReloadProperties(); } EditorUtilityHelper.ForceReloadInspectors(); }