From 06c1da2e98c83459aa1611fe5bb5dd65044fb2cb Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 26 Nov 2024 21:56:31 +0900 Subject: [PATCH] VRM10SpringBoneColliderGroupEditor --- .../VRM10SpringBoneColliderGroupEditor.cs | 86 +++++++++++++++++++ ...VRM10SpringBoneColliderGroupEditor.cs.meta | 11 +++ 2 files changed, 97 insertions(+) create mode 100644 Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneColliderGroupEditor.cs create mode 100644 Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneColliderGroupEditor.cs.meta diff --git a/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneColliderGroupEditor.cs b/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneColliderGroupEditor.cs new file mode 100644 index 000000000..c2d02a75e --- /dev/null +++ b/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneColliderGroupEditor.cs @@ -0,0 +1,86 @@ +using System; +using System.Linq; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + + +namespace UniVRM10 +{ + [CustomEditor(typeof(VRM10SpringBoneColliderGroup))] + class VRM10SpringBoneColliderGroupEditor : Editor + { + ListView m_colliders; + + static VRM10SpringBoneCollider s_collider; + + public override VisualElement CreateInspectorGUI() + { + var root = new VisualElement(); + + // root.TrackSerializedObjectValue(serializedObject, OnValueChanged); + + root.Bind(serializedObject); + + { + var s = new PropertyField { bindingPath = "m_Script" }; + s.SetEnabled(false); + root.Add(s); + } + + + root.Add(new PropertyField { bindingPath = nameof(VRM10SpringBoneColliderGroup.Name) }); + + { + m_colliders = new ListView + { + bindingPath = nameof(VRM10SpringBoneColliderGroup.Colliders) + }; + m_colliders.selectionChanged += (e) => + { + var item = (SerializedProperty)e.FirstOrDefault(); + if (item == null) + { + s_collider = null; + } + else + { + s_collider = (VRM10SpringBoneCollider)item.objectReferenceValue; + } + }; + m_colliders.showAddRemoveFooter = true; + m_colliders.showFoldoutHeader = true; + m_colliders.headerTitle = "Colliders"; + root.Add(m_colliders); + } + + return root; + } + + public void OnSceneGUI() + { + HandleUtility.Repaint(); + if (m_colliders == null) + { + return; + } + + if (s_collider is VRM10SpringBoneCollider c) + { + // var t = p.transform; + // Handles.color = Color.green; + // Handles.SphereHandleCap(t.GetInstanceID(), t.position, t.rotation, p.Radius * 2, EventType.Repaint); + + EditorGUI.BeginChangeCheck(); + Handles.matrix = c.transform.localToWorldMatrix; + var newTargetPosition = Handles.PositionHandle(c.Offset, Quaternion.identity); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(c, "collider"); + c.Offset = newTargetPosition; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneColliderGroupEditor.cs.meta b/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneColliderGroupEditor.cs.meta new file mode 100644 index 000000000..5e1e59629 --- /dev/null +++ b/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneColliderGroupEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ccae4c83e5d3a6438402cdd307f4ad2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: