fix: minor issues with scale adjuster (#679)

* fix: undo operations can cause scale adjuster to perma-disable meshes

* fix: tool is left hidden after scale adjuster is deleted
This commit is contained in:
bd_ 2024-02-18 21:47:48 +09:00 committed by GitHub
parent 6eab55ae26
commit d57e211d0b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 47 additions and 22 deletions

View File

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

View File

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