コード例 #1
0
        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);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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();
            }
        }