diff --git a/Editor/Inspector/ScaleAdjusterTool.cs b/Editor/Inspector/ScaleAdjusterTool.cs index 04375323..6e5d48eb 100644 --- a/Editor/Inspector/ScaleAdjusterTool.cs +++ b/Editor/Inspector/ScaleAdjusterTool.cs @@ -127,10 +127,30 @@ namespace nadena.dev.modular_avatar.core.editor private static Vector3 _gizmoScale; private static Quaternion _handleRotation; + private static bool _toolHidden; + + private static bool ToolHidden + { + get => _toolHidden; + set + { + if (_toolHidden && !value) + { + Tools.hidden = false; + } else if (value) + { + Tools.hidden = true; + } + + _toolHidden = value; + } + } + + private static void OnSelectionChanged() { _selection.Clear(); - Tools.hidden = false; + ToolHidden = false; _active = null; } @@ -140,7 +160,7 @@ namespace nadena.dev.modular_avatar.core.editor { if (_active == true) { - Tools.hidden = false; + ToolHidden = false; _active = null; } @@ -149,10 +169,12 @@ namespace nadena.dev.modular_avatar.core.editor if (ShouldEnable()) { - Tools.hidden = true; + ToolHidden = true; } else { + ToolHidden = false; + return; } diff --git a/Runtime/ScaleAdjuster/ScaleAdjusterRenderer.cs b/Runtime/ScaleAdjuster/ScaleAdjusterRenderer.cs index 0716b5de..4282b9d6 100644 --- a/Runtime/ScaleAdjuster/ScaleAdjusterRenderer.cs +++ b/Runtime/ScaleAdjuster/ScaleAdjusterRenderer.cs @@ -15,7 +15,7 @@ namespace nadena.dev.modular_avatar.core [RequireComponent(typeof(SkinnedMeshRenderer))] internal class ScaleAdjusterRenderer : MonoBehaviour, IEditorOnly { - private static event Action OnPreInspector; + private static event Action OnClearAllOverrides; private static int RecreateHierarchyIndexCount = 0; #if UNITY_EDITOR @@ -72,9 +72,10 @@ namespace nadena.dev.modular_avatar.core private void OnDestroy() { - ClearOverrides(); + ClearAllOverrides(); } + #if UNITY_EDITOR private void Update() { if (myRenderer == null) @@ -124,7 +125,7 @@ namespace nadena.dev.modular_avatar.core myRenderer.SetBlendShapeWeight(i, parentRenderer.GetBlendShapeWeight(i)); } - ClearOverrides(); + ClearAllOverrides(); myRenderer.enabled = parentRenderer.enabled; } @@ -136,7 +137,7 @@ namespace nadena.dev.modular_avatar.core return; } - ClearOverrides(); + ClearAllOverrides(); if (!parentRenderer.enabled || !parentRenderer.gameObject.activeInHierarchy) { @@ -145,23 +146,25 @@ namespace nadena.dev.modular_avatar.core parentRenderer.enabled = false; wasActive = true; - OnPreInspector += ClearOverrides; + var objName = parentRenderer.gameObject.name; + OnClearAllOverrides += ClearLocalOverride; + // Sometimes - e.g. around domain reloads or undo operations - the parent renderer's enabled field might get + // re-disabled; re-enabler it in delayCall in this case. + UnityEditor.EditorApplication.delayCall += ClearLocalOverride; + } + #endif + + private void ClearLocalOverride() + { + if (parentRenderer != null) + { + parentRenderer.enabled = true; + } } private void OnPostRender() { - ClearOverrides(); - } - - private void ClearOverrides() - { - if (this == null) return; - - if (wasActive && parentRenderer != null) - { - parentRenderer.enabled = true; - wasActive = false; - } + ClearAllOverrides(); } public void ClearBoneCache() @@ -171,8 +174,8 @@ namespace nadena.dev.modular_avatar.core internal static void ClearAllOverrides() { - OnPreInspector?.Invoke(); - OnPreInspector = null; + OnClearAllOverrides?.Invoke(); + OnClearAllOverrides = null; } } } \ No newline at end of file