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); }
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); }