diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/AvatarParametersEditor.cs b/Packages/net.fushizen.modular-avatar/Editor/Inspector/AvatarParametersEditor.cs index 9ef8ce6f..850aed16 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/Inspector/AvatarParametersEditor.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/Inspector/AvatarParametersEditor.cs @@ -413,7 +413,8 @@ namespace net.fushizen.modular_avatar.core.editor public override void OnInspectorGUI() { LogoDisplay.DisplayLogo(); - + InspectorCommon.DisplayOutOfAvatarWarning(targets); + EditorGUI.BeginChangeCheck(); _devMode = EditorGUILayout.Toggle(G("params.devmode"), _devMode); if (EditorGUI.EndChangeCheck() || _reorderableList == null || _needsRebuild) SetupList(); diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/BlendshapeSyncEditor.cs b/Packages/net.fushizen.modular-avatar/Editor/Inspector/BlendshapeSyncEditor.cs index 4b31e220..b9aced4f 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/Inspector/BlendshapeSyncEditor.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/Inspector/BlendshapeSyncEditor.cs @@ -246,6 +246,8 @@ namespace net.fushizen.modular_avatar.core.editor { LogoDisplay.DisplayLogo(); + InspectorCommon.DisplayOutOfAvatarWarning(targets); + serializedObject.Update(); _list.DoLayoutList(); diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/BoneProxyEditor.cs b/Packages/net.fushizen.modular-avatar/Editor/Inspector/BoneProxyEditor.cs index 1813d542..7abb37b3 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/Inspector/BoneProxyEditor.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/Inspector/BoneProxyEditor.cs @@ -29,7 +29,8 @@ namespace net.fushizen.modular_avatar.core.editor public override void OnInspectorGUI() { LogoDisplay.DisplayLogo(); - + InspectorCommon.DisplayOutOfAvatarWarning(targets); + GameObject parentAvatar = null; bool suppressTarget = false; diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/FirstPersonVisibleEditor.cs b/Packages/net.fushizen.modular-avatar/Editor/Inspector/FirstPersonVisibleEditor.cs index a7db0262..b6143981 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/Inspector/FirstPersonVisibleEditor.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/Inspector/FirstPersonVisibleEditor.cs @@ -21,6 +21,10 @@ namespace net.fushizen.modular_avatar.core.editor { var target = (ModularAvatarFirstPersonVisible) this.target; + LogoDisplay.DisplayLogo(); + + InspectorCommon.DisplayOutOfAvatarWarning(targets); + #if UNITY_ANDROID EditorGUILayout.HelpBox(Localization.S("fpvisible.quest"), MessageType.Warning); diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/GUIColorScope.cs b/Packages/net.fushizen.modular-avatar/Editor/Inspector/GUIColorScope.cs deleted file mode 100644 index 4bf93df1..00000000 --- a/Packages/net.fushizen.modular-avatar/Editor/Inspector/GUIColorScope.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using UnityEngine; - -namespace net.fushizen.modular_avatar.core.editor -{ - public class GUIColorScope : IDisposable - { - private readonly Color _oldColor; - - public GUIColorScope(Color color) - { - _oldColor = GUI.color; - GUI.color = color; - } - - public void Dispose() - { - GUI.color = _oldColor; - } - } -} \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/GUIColorScope.cs.meta b/Packages/net.fushizen.modular-avatar/Editor/Inspector/GUIColorScope.cs.meta deleted file mode 100644 index 41b05a82..00000000 --- a/Packages/net.fushizen.modular-avatar/Editor/Inspector/GUIColorScope.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 775469f355c64ef2b3e3f5de10e2cde4 -timeCreated: 1667876954 \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/InspectorCommon.cs b/Packages/net.fushizen.modular-avatar/Editor/Inspector/InspectorCommon.cs new file mode 100644 index 00000000..cec24dcf --- /dev/null +++ b/Packages/net.fushizen.modular-avatar/Editor/Inspector/InspectorCommon.cs @@ -0,0 +1,23 @@ +using UnityEditor; +using UnityEditor.Experimental.SceneManagement; +using UnityEngine; + +namespace net.fushizen.modular_avatar.core.editor +{ + internal static class InspectorCommon + { + internal static void DisplayOutOfAvatarWarning(Object[] targets) + { + if (PrefabStageUtility.GetCurrentPrefabStage() != null) return; + if (targets.Length != 1) return; + + var target = targets[0] as Component; + if (target == null) return; + + if (RuntimeUtil.FindAvatarInParents(target.transform) == null) + { + EditorGUILayout.HelpBox(Localization.S("hint.not_in_avatar"), MessageType.Warning); + } + } + } +} \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/InspectorCommon.cs.meta b/Packages/net.fushizen.modular-avatar/Editor/Inspector/InspectorCommon.cs.meta new file mode 100644 index 00000000..32e9ed1f --- /dev/null +++ b/Packages/net.fushizen.modular-avatar/Editor/Inspector/InspectorCommon.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3f28108b9ff54e18af150d9172ae275b +timeCreated: 1667882294 \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/MenuInstallerEditor.cs b/Packages/net.fushizen.modular-avatar/Editor/Inspector/MenuInstallerEditor.cs index 37b8c0ab..9496759e 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/Inspector/MenuInstallerEditor.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/Inspector/MenuInstallerEditor.cs @@ -50,6 +50,7 @@ namespace net.fushizen.modular_avatar.core.editor public override void OnInspectorGUI() { LogoDisplay.DisplayLogo(); + InspectorCommon.DisplayOutOfAvatarWarning(targets); SetupMenuEditor(); diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/MergeAnimationEditor.cs b/Packages/net.fushizen.modular-avatar/Editor/Inspector/MergeAnimationEditor.cs index b4b6c2e3..27d99d05 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/Inspector/MergeAnimationEditor.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/Inspector/MergeAnimationEditor.cs @@ -49,6 +49,7 @@ namespace net.fushizen.modular_avatar.core.editor public override void OnInspectorGUI() { LogoDisplay.DisplayLogo(); + InspectorCommon.DisplayOutOfAvatarWarning(targets); serializedObject.Update(); diff --git a/Packages/net.fushizen.modular-avatar/Editor/Inspector/MergeArmatureEditor.cs b/Packages/net.fushizen.modular-avatar/Editor/Inspector/MergeArmatureEditor.cs index 01c7a932..cc31a784 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/Inspector/MergeArmatureEditor.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/Inspector/MergeArmatureEditor.cs @@ -33,6 +33,7 @@ namespace net.fushizen.modular_avatar.core.editor public override void OnInspectorGUI() { LogoDisplay.DisplayLogo(); + InspectorCommon.DisplayOutOfAvatarWarning(targets); var target = (ModularAvatarMergeArmature) this.target; var priorMergeTarget = target.mergeTargetObject; diff --git a/Packages/net.fushizen.modular-avatar/Editor/Localization/en.json b/Packages/net.fushizen.modular-avatar/Editor/Localization/en.json index 500e308b..d5d4e2f7 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/Localization/en.json +++ b/Packages/net.fushizen.modular-avatar/Editor/Localization/en.json @@ -44,5 +44,6 @@ "fpvisible.InPhysBoneChain": "This object is controlled by a Physics Bone chain and cannot be made visible in first person safely. Select the start of the chain instead.", "blendshape.mesh": "Mesh", "blendshape.source": "Source blendshape", - "blendshape.target": "Target blendshape" + "blendshape.target": "Target blendshape", + "hint.not_in_avatar": "This component needs to be placed inside your avatar to work properly." } \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Editor/Localization/ja.json b/Packages/net.fushizen.modular-avatar/Editor/Localization/ja.json index 4337c1da..ddc44db7 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/Localization/ja.json +++ b/Packages/net.fushizen.modular-avatar/Editor/Localization/ja.json @@ -44,5 +44,6 @@ "fpvisible.InPhysBoneChain": "このオブジェクトはPhysBoneに制御されているため、一人視点で表示できません。PhysBoneの始点を指定してください。", "blendshape.mesh": "メッシュ", "blendshape.source": "元メッシュのブレンドシェープ", - "blendshape.target": "このメッシュのブレンドシェープ" + "blendshape.target": "このメッシュのブレンドシェープ", + "hint.not_in_avatar": "このコンポーネントが正しく動作するには、アバター内に配置する必要があります。" } \ No newline at end of file