public override VisualElement CreatePropertyGUI(SerializedProperty property)
        {
            var container = new VisualElement();
            var helpBox   = new IMGUIContainer(() => EditorGUILayout.HelpBox($"{nameof(GimmickTarget)} を {nameof(GimmickTarget.Item)} にするには {nameof(Item)} を指定する必要があります。", MessageType.Warning));
            var itemField = new ObjectField(property.displayName)
            {
                objectType = typeof(Item.Implements.Item),
                value      = property.objectReferenceValue
            };

            itemField.Bind(property.serializedObject);

            itemField.RegisterCallback <ChangeEvent <UnityEngine.Object> >(e =>
            {
                property.objectReferenceValue = e.newValue;
                SwitchDisplayHelp(e.newValue == null);
                property.serializedObject.ApplyModifiedProperties();
            });

            void SwitchDisplayHelp(bool show)
            {
                helpBox.SetVisibility(show);
            }

            SwitchDisplayHelp(property.objectReferenceValue == null);

            container.Add(helpBox);
            container.Add(itemField);

            return(container);
        }
Example #2
0
        public override VisualElement CreatePropertyGUI(SerializedProperty property)
        {
            var container = new VisualElement();

            var helpBox     = new IMGUIContainer(() => EditorGUILayout.HelpBox($"{property.displayName} を指定する必要があります。", MessageType.Warning));
            var objectField = new ObjectField(property.displayName)
            {
                objectType = ((RequiredObjectAttribute)attribute).PropertyType,
                value      = property.objectReferenceValue,
            };

            objectField.Bind(property.serializedObject);

            objectField.RegisterCallback <ChangeEvent <UnityEngine.Object> >(e =>
            {
                property.objectReferenceValue = e.newValue;
                SwitchDisplayHelp(e.newValue == null);
                property.serializedObject.ApplyModifiedProperties();
            });

            void SwitchDisplayHelp(bool show)
            {
                helpBox.SetVisibility(show);
            }

            SwitchDisplayHelp(property.objectReferenceValue == null);

            container.Add(helpBox);
            container.Add(objectField);

            return(container);
        }
        public override VisualElement CreateInspectorGUI()
        {
            var container = new VisualElement();

            var keyField = new PropertyField(serializedObject.FindProperty("key"));

            container.Add(keyField);

            var itemTemplateProperty           = serializedObject.FindProperty("itemTemplate");
            var itemTemplateIsNoneHelpBox      = new IMGUIContainer(() => EditorGUILayout.HelpBox($"{itemTemplateProperty.displayName} を指定する必要があります。", MessageType.Warning));
            var itemTemplateIsNotPrefabHelpBox = new IMGUIContainer(() => EditorGUILayout.HelpBox($"{itemTemplateProperty.displayName} には Prefab の指定を推奨しています。", MessageType.Warning));

            void SwitchDisplayHelp(UnityEngine.Object obj)
            {
                itemTemplateIsNoneHelpBox.SetVisibility(obj == null);
                itemTemplateIsNotPrefabHelpBox.SetVisibility(obj != null && ((Item.Implements.Item)obj).gameObject.scene.name != null);
            }

            container.Add(itemTemplateIsNoneHelpBox);
            container.Add(itemTemplateIsNotPrefabHelpBox);

            var itemTemplateField = new ObjectField(itemTemplateProperty.displayName)
            {
                tooltip    = "生成するアイテムのprefab",
                objectType = typeof(Item.Implements.Item),
                value      = itemTemplateProperty.objectReferenceValue
            };

            itemTemplateField.RegisterCallback <ChangeEvent <UnityEngine.Object> >(e =>
            {
                itemTemplateProperty.objectReferenceValue = e.newValue;
                SwitchDisplayHelp(e.newValue);
                itemTemplateProperty.serializedObject.ApplyModifiedProperties();
            });
            SwitchDisplayHelp(itemTemplateProperty.objectReferenceValue);
            itemTemplateField.Bind(itemTemplateProperty.serializedObject);
            container.Add(itemTemplateField);

            var spawnPointField = new PropertyField(serializedObject.FindProperty("spawnPoint"))
            {
                tooltip = "生成位置(任意)"
            };

            container.Add(spawnPointField);

            container.Bind(serializedObject);
            return(container);
        }
        public override VisualElement CreatePropertyGUI(SerializedProperty property)
        {
            var container = new VisualElement();

            var keyProperty    = property.FindPropertyRelative("key");
            var targetProperty = keyProperty.FindPropertyRelative("target");

            var itemContainer = new PropertyField(property.FindPropertyRelative("item"));

            var component          = (Component)property.serializedObject.targetObject;
            var scene              = component.gameObject.scene;
            var isInScene          = scene.name != null && !EditorSceneManager.IsPreviewScene(scene);
            var messageType        = isInScene ? MessageType.Error : MessageType.Warning;
            var localPlayerHelpBox = new IMGUIContainer(() => EditorGUILayout.HelpBox(LocalPlayerGimmickValidation.ErrorMessage, messageType));

            void SwitchDisplayItem(GimmickTarget target)
            {
                itemContainer.SetVisibility(target == GimmickTarget.Item);
                localPlayerHelpBox.SetVisibility(!LocalPlayerGimmickValidation.IsValid(target, component));
            }

            SwitchDisplayItem((GimmickTarget)targetProperty.enumValueIndex);

            var targetField = EnumField.Create(
                targetProperty.displayName,
                targetProperty,
                LocalPlayerGimmickValidation.IsLocalizable(component) ? LocalizableSelectables : ConsistentlySyncSelectables,
                (GimmickTarget)targetProperty.enumValueIndex,
                FormatTarget, SwitchDisplayItem);

            var keyField = new PropertyField(keyProperty.FindPropertyRelative("key"));

            container.Add(localPlayerHelpBox);
            container.Add(targetField);
            container.Add(keyField);
            container.Add(itemContainer);

            return(container);
        }
        static VisualElement CreateItemContainer(SerializedProperty property)
        {
            var container = new VisualElement();

            var helpBox   = new IMGUIContainer(() => EditorGUILayout.HelpBox($"{nameof(Target)} を {nameof(Target.Item)} にするには {nameof(Item)} を指定する必要があります。", MessageType.Warning));
            var itemField = new PropertyField(property);

            itemField.RegisterCallback <ChangeEvent <UnityEngine.Object> >(e =>
            {
                SwitchDisplayHelp(e.newValue == null);
            });

            void SwitchDisplayHelp(bool show)
            {
                helpBox.SetVisibility(show);
            }

            SwitchDisplayHelp(property.objectReferenceValue == null);

            container.Add(helpBox);
            container.Add(itemField);

            return(container);
        }