void Start() { // Created from a prefab if (_isPrefab && Application.isPlaying) { if (_uidSet == false) { Debug.Log($"SETTING NEW ID FOR {gameObject.name}"); _persistenceUid = PersistentUid.NewUid(); _isPrefab = false; _linkedPrefabUid = _prefabUid; } } PersistenceController.RegisterPersistentObject(Uid, this); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { EditorGUI.BeginProperty(position, label, property); position = EditorGUI.PrefixLabel(position, label); float w = Mathf.Min(position.width, 60f); var r2 = new Rect(position.xMax - w, position.yMin, w, position.height); var r1 = new Rect(position.xMin, position.yMin, Mathf.Max(position.width - w, 0f), position.height); var uidProp = property.FindPropertyRelative("_uid"); var value = uidProp.stringValue; GUI.enabled = false; EditorGUI.SelectableLabel(r1, value, EditorStyles.textField); GUI.enabled = true; if (GUI.Button(r2, "New Id")) { value = PersistentUid.NewUid().Value; uidProp.stringValue = value.ToString(); } EditorGUI.EndProperty(); }
public override void OnInspectorGUI() { GUILayout.Label($"Prefab status: {PrefabUtility.GetPrefabInstanceStatus(persistentObject)}"); EditorGUI.BeginChangeCheck(); if (isPrefab && prevPrefab == null) { prevPrefab = GetPrefab(); if (prevPrefab) { PersistenceController.RegisterPrefab(prevPrefab); } } EditorGUILayout.PropertyField(isPrefabProp); if (EditorGUI.EndChangeCheck()) { isPrefab = isPrefabProp.boolValue; if (isPrefab) { PersistentObject prefab = GetPrefab(); if (prefab != null) { PersistenceController.RegisterPrefab(prefab); prevPrefab = prefab; } if (prefabUidIdProp.stringValue == "") { prefabUidIdProp.stringValue = PersistentUid.NewUid().Value; } } else { if (prevPrefab) { PersistenceController.UnregisterPrefab(prevPrefab); } if (persistenceUidIdProp.stringValue == "") { persistenceUidIdProp.stringValue = PersistentUid.NewUid().Value; } } } if (isPrefab && prevPrefab == null) { EditorGUILayout.HelpBox("Is Prefab property was set to true, but no corresponding prefab was found", MessageType.Warning); } if (isPrefab) { EditorGUILayout.PropertyField(prefabUidProp); } else { EditorGUILayout.PropertyField(persistenceUidProp); if (linkedPrefabUidIdProp.stringValue != "") { EditorGUILayout.PropertyField(linkedPrefabUidProp); } } EditorGUILayout.PropertyField(componentsToSerializeProp, true); serializedObject.ApplyModifiedProperties(); if (GUILayout.Button("Update prefab map")) { UpdatePrefabMap(); } }