use MonoBehaviour.OnValidate

This commit is contained in:
ousttrue
2024-11-19 12:58:52 +09:00
parent 32e004d821
commit bf9c438f1f
2 changed files with 30 additions and 32 deletions

View File

@@ -25,34 +25,6 @@ namespace VRM
private SerializedProperty m_colliderGroupsProp;
private SerializedProperty m_updateTypeProp;
Dictionary<Transform, int> m_rootCount = new();
List<Validation> m_validation = new();
IEnumerable<Validation> 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();
}

View File

@@ -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<Transform, int> m_rootCount = new();
List<Validation> m_validations = new();
public List<Validation> 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();