From 32e004d821dbc3c470d435b43bcf784fc334639f Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 19 Nov 2024 01:50:05 +0900 Subject: [PATCH] Editor.OnValidate not work --- .../Editor/SpringBone/VRMSpringBoneEditor.cs | 31 ++++++++++++------- .../VRM/Runtime/SpringBone/VRMSpringBone.cs | 2 +- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Assets/VRM/Editor/SpringBone/VRMSpringBoneEditor.cs b/Assets/VRM/Editor/SpringBone/VRMSpringBoneEditor.cs index c591ee672..5a870b006 100644 --- a/Assets/VRM/Editor/SpringBone/VRMSpringBoneEditor.cs +++ b/Assets/VRM/Editor/SpringBone/VRMSpringBoneEditor.cs @@ -25,18 +25,12 @@ namespace VRM private SerializedProperty m_colliderGroupsProp; private SerializedProperty m_updateTypeProp; - void OnValidate() - { - if (Validate().Any()) - { - m_target.m_gizmoColor = Color.magenta; - } - } - Dictionary m_rootCount = new(); + List m_validation = new(); IEnumerable Validate() { + m_validation.Clear(); m_rootCount.Clear(); foreach (var root in m_target.RootBones) { @@ -53,9 +47,10 @@ namespace VRM { if (v > 1) { - yield return Validation.Error($"Duplicate rootBone: {k} => {v}"); + m_validation.Add(Validation.Error($"Duplicate rootBone: {k} => {v}", ValidationContext.Create(k))); } } + return m_validation; } void OnEnable() @@ -68,7 +63,7 @@ namespace VRM m_script = serializedObject.FindProperty("m_Script"); m_commentProp = serializedObject.FindProperty(nameof(VRMSpringBone.m_comment)); - m_gizmoColorProp = serializedObject.FindProperty(nameof(VRMSpringBone.m_gizmoColor)); + m_gizmoColorProp = serializedObject.FindProperty("m_gizmoColor"); m_stiffnessForceProp = serializedObject.FindProperty(nameof(VRMSpringBone.m_stiffnessForce)); m_gravityPowerProp = serializedObject.FindProperty(nameof(VRMSpringBone.m_gravityPower)); m_gravityDirProp = serializedObject.FindProperty(nameof(VRMSpringBone.m_gravityDir)); @@ -78,6 +73,20 @@ namespace VRM m_hitRadiusProp = serializedObject.FindProperty(nameof(VRMSpringBone.m_hitRadius)); m_colliderGroupsProp = serializedObject.FindProperty(nameof(VRMSpringBone.ColliderGroups)); m_updateTypeProp = serializedObject.FindProperty(nameof(VRMSpringBone.m_updateType)); + + Validate(); + } + + public void OnSceneGUI() + { + foreach (var valiation in m_validation) + { + var t = (Transform)valiation.Context.Context; + if (t != null) + { + Handles.Label(t.position, "duplicate rootBone !"); + } + } } public override void OnInspectorGUI() @@ -92,7 +101,7 @@ namespace VRM EditorGUILayout.PropertyField(m_commentProp); EditorGUILayout.PropertyField(m_gizmoColorProp); EditorGUILayout.Space(); - foreach (var validation in Validate()) + foreach (var validation in m_validation) { validation.DrawGUI(); } diff --git a/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs b/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs index 30c74ea7a..75ed5f950 100644 --- a/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs +++ b/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs @@ -13,7 +13,7 @@ namespace VRM public sealed class VRMSpringBone : MonoBehaviour { [SerializeField] public string m_comment; - [SerializeField] public Color m_gizmoColor = Color.yellow; + [SerializeField] private Color m_gizmoColor = Color.yellow; [SerializeField] public float m_stiffnessForce = 1.0f; [SerializeField] public float m_gravityPower; [SerializeField] public Vector3 m_gravityDir = new Vector3(0, -1.0f, 0);