From bf9c438f1fe131c4317440fe197cfee66a579bef Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 19 Nov 2024 12:58:52 +0900 Subject: [PATCH] use MonoBehaviour.OnValidate --- .../Editor/SpringBone/VRMSpringBoneEditor.cs | 34 ++----------------- .../VRM/Runtime/SpringBone/VRMSpringBone.cs | 28 +++++++++++++++ 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/Assets/VRM/Editor/SpringBone/VRMSpringBoneEditor.cs b/Assets/VRM/Editor/SpringBone/VRMSpringBoneEditor.cs index 5a870b006..680bde7c5 100644 --- a/Assets/VRM/Editor/SpringBone/VRMSpringBoneEditor.cs +++ b/Assets/VRM/Editor/SpringBone/VRMSpringBoneEditor.cs @@ -25,34 +25,6 @@ namespace VRM private SerializedProperty m_colliderGroupsProp; private SerializedProperty m_updateTypeProp; - Dictionary m_rootCount = new(); - List m_validation = new(); - - IEnumerable Validate() - { - m_validation.Clear(); - m_rootCount.Clear(); - foreach (var root in m_target.RootBones) - { - if (m_rootCount.TryGetValue(root, out var count)) - { - m_rootCount[root] = count + 1; - } - else - { - m_rootCount.Add(root, 1); - } - } - foreach (var (k, v) in m_rootCount) - { - if (v > 1) - { - m_validation.Add(Validation.Error($"Duplicate rootBone: {k} => {v}", ValidationContext.Create(k))); - } - } - return m_validation; - } - void OnEnable() { if (target == null) @@ -73,13 +45,11 @@ 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) + foreach (var valiation in m_target.Validations) { var t = (Transform)valiation.Context.Context; if (t != null) @@ -101,7 +71,7 @@ namespace VRM EditorGUILayout.PropertyField(m_commentProp); EditorGUILayout.PropertyField(m_gizmoColorProp); EditorGUILayout.Space(); - foreach (var validation in m_validation) + foreach (var validation in m_target.Validations) { validation.DrawGUI(); } diff --git a/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs b/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs index 75ed5f950..056224d35 100644 --- a/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs +++ b/Assets/VRM/Runtime/SpringBone/VRMSpringBone.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using UniGLTF; using UnityEngine; namespace VRM @@ -60,6 +61,33 @@ namespace VRM } SpringBone.SpringBoneSystem m_system = new(); + Dictionary m_rootCount = new(); + List m_validations = new(); + public List Validations => m_validations; + public void OnValidate() + { + Validations.Clear(); + m_rootCount.Clear(); + foreach (var root in RootBones) + { + if (m_rootCount.TryGetValue(root, out var count)) + { + m_rootCount[root] = count + 1; + } + else + { + m_rootCount.Add(root, 1); + } + } + foreach (var (k, v) in m_rootCount) + { + if (v > 1) + { + Validations.Add(Validation.Error($"Duplicate rootBone: {k} => {v}", ValidationContext.Create(k))); + } + } + } + void Awake() { Setup();