VRM10SpringBoneColliderGroupEditor

This commit is contained in:
ousttrue
2024-11-26 21:56:31 +09:00
parent b75accf910
commit 06c1da2e98
2 changed files with 97 additions and 0 deletions

View File

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

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0ccae4c83e5d3a6438402cdd307f4ad2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: