Ejemplo n.º 1
0
        private static void OnPropertyContextMenu(GenericMenu menu, SerializedProperty property)
        {
            var component  = property.serializedObject.targetObject as Component;
            var gameObject = property.serializedObject.targetObject as GameObject;

            GameObject targetGameObject = null;

            if (component != null)
            {
                targetGameObject = component.gameObject;
            }

            if (gameObject != null)
            {
                targetGameObject = gameObject;
            }

            if (targetGameObject == null)
            {
                return;
            }

            var prefabRoot = PEUtils.FindRootPrefab(targetGameObject);

            if (prefabRoot == null)
            {
                return;
            }

            var prefabScript = prefabRoot.GetComponent <PEPrefabScript>();

            if (prefabScript == null)
            {
                return;
            }

            if (!PEExposedPropertiesEditor.CanEditProperties(new[] { prefabScript }))
            {
                return;
            }

            var exposed = prefabScript.Properties.HasProperty(property.serializedObject.targetObject, property.propertyPath);

            property = property.Copy();
            menu.AddItem(new GUIContent("Expose Property"), exposed, () =>
            {
                if (!exposed)
                {
                    prefabScript.Properties.Add(new ExposedProperty()
                    {
                        Label = property.displayName, PropertyPath = property.propertyPath, Target = property.serializedObject.targetObject
                    });
                    PEExposedPropertiesEditor.current.needRebuild = true;
                    EditorUtility.SetDirty(prefabScript);
                }
                else
                {
                    prefabScript.Properties.Remove(property.serializedObject.targetObject, property.propertyPath);
                    PEExposedPropertiesEditor.current.needRebuild = true;
                    EditorUtility.SetDirty(prefabScript);
                }
            });
        }