UniVRM/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneColliderGroupEditor.cs
2024-11-26 21:56:31 +09:00

86 lines
2.6 KiB
C#

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