collider の offset 操作

This commit is contained in:
ousttrue
2022-10-20 19:25:34 +09:00
parent 2a992950a6
commit 61a0a28c93
3 changed files with 54 additions and 82 deletions

View File

@@ -27,6 +27,8 @@ namespace UniVRM10
s_treeView = null;
}
public static MonoBehaviour Active;
/// <summary>
/// 2D の GUI 描画
/// </summary>
@@ -50,7 +52,7 @@ namespace UniVRM10
var tree = GetTree(target, so);
if (tree != null && target != null)
{
tree.Draw3D(target.SpringBone);
Active = tree.Draw3D(target.SpringBone);
}
}
}

View File

@@ -116,8 +116,17 @@ namespace UniVRM10
Color s_selectedColor = new Color(0.5f, 0, 0, 0.5f);
Color s_Color = new Color(0.6f, 0.6f, 0.6f, 0.5f);
public void Draw3D(Vrm10InstanceSpringBone springBone)
Vrm10InstanceSpringBone last = null;
MonoBehaviour Active = null;
public MonoBehaviour Draw3D(Vrm10InstanceSpringBone springBone)
{
if (springBone != last)
{
Active = null;
last = springBone;
}
if (_selected is SelectedColliderGroupGUI colliderGroup)
{
// colliderGroup.Draw3D();
@@ -127,14 +136,15 @@ namespace UniVRM10
// TODO
}
MonoBehaviour newActive = null;
foreach (var group in springBone.ColliderGroups)
{
foreach (var collider in group.Colliders)
{
var color = collider.gameObject == Selection.activeObject ? s_selectedColor : s_Color;
var color = collider == Active ? s_selectedColor : s_Color;
if (DrawCollider(collider, color))
{
Selection.activeObject = collider.gameObject;
newActive = collider;
}
}
}
@@ -144,13 +154,44 @@ namespace UniVRM10
{
var head = spring.Joints[i - 1];
var tail = spring.Joints[i];
var color = tail.gameObject == Selection.activeObject ? s_selectedColor : s_Color;
var color = head == Active ? s_selectedColor : s_Color;
if (DrawJoint(head, tail, color))
{
Selection.activeObject = tail.gameObject;
newActive = head;
}
}
}
if (Active is VRM10SpringBoneCollider activeCollider)
{
EditorGUI.BeginChangeCheck();
Handles.matrix = activeCollider.transform.localToWorldMatrix;
var offset = Handles.PositionHandle(activeCollider.Offset, Quaternion.identity);
var tail = Vector3.zero;
if (activeCollider.ColliderType == VRM10SpringBoneColliderTypes.Capsule)
{
tail = Handles.PositionHandle(activeCollider.Tail, Quaternion.identity);
}
var offsetChanged = EditorGUI.EndChangeCheck();
if (offsetChanged)
{
// apply
Undo.RecordObject(activeCollider, "activeCollider");
activeCollider.Offset = offset;
if (activeCollider.ColliderType == VRM10SpringBoneColliderTypes.Capsule)
{
activeCollider.Tail = tail;
}
}
}
if (newActive != null)
{
Selection.activeObject = newActive.gameObject;
Active = newActive;
}
return Active;
}
static bool IsLeftDown()

View File

@@ -71,49 +71,14 @@ namespace UniVRM10
Transform m_head;
// public IVrm10Constraint[] m_constraints;
ScrollView m_scrollView = new ScrollView();
// enum VRMSceneUI
// {
// Constraints,
// SpringBone,
// }
// static VRMSceneUI s_ui = default;
// static string[] s_selection;
// static string[] Selection
// {
// get
// {
// if (s_selection == null)
// {
// s_selection = Enum.GetNames(typeof(VRMSceneUI));
// }
// return s_selection;
// }
// }
/// <summary>
/// public entry point
/// </summary>
/// <param name="target"></param>
void OnSceneGUI(SceneView sceneView)
{
// switch (s_ui)
// {
// case VRMSceneUI.Constraints:
// Tools.hidden = false;
// break;
// case VRMSceneUI.SpringBone:
// Tools.hidden = true;
// SpringBoneEditor.Draw3D(Root, m_so);
// break;
// default:
// throw new NotImplementedException();
// }
Tools.hidden = true;
SpringBoneEditor.Draw3D(Root, m_so);
}
@@ -133,18 +98,17 @@ namespace UniVRM10
}
}
// Root
Root = (Vrm10Instance)EditorGUILayout.ObjectField("vrm1", Root, typeof(Vrm10Instance), true);
if (Root == null)
{
return;
}
// var ui = (VRMSceneUI)GUILayout.SelectionGrid((int)s_ui, Selection, 3);
// if (s_ui != ui)
// {
// s_ui = ui;
// SceneView.RepaintAll();
// }
// active
EditorGUI.BeginDisabledGroup(true);
EditorGUILayout.ObjectField("joint or collider", SpringBoneEditor.Active, typeof(MonoBehaviour), true);
EditorGUI.EndDisabledGroup();
if (m_so == null)
{
@@ -156,44 +120,9 @@ namespace UniVRM10
}
m_so.Update();
// switch (s_ui)
// {
// case VRMSceneUI.Constraints:
// m_scrollView.Draw(this.position.y, DrawConstraints, Repaint);
// break;
// case VRMSceneUI.SpringBone:
// SpringBoneEditor.Draw2D(Root, m_so);
// break;
// default:
// throw new NotImplementedException();
// }
SpringBoneEditor.Draw2D(Root, m_so);
m_so.ApplyModifiedProperties();
}
// void DrawConstraints()
// {
// if (Root != null)
// {
// if (m_constraints == null)
// {
// m_constraints = Root.GetComponentsInChildren<IVrm10Constraint>();
// }
// }
// using (new EditorGUI.DisabledScope(true))
// {
// if (m_constraints != null)
// {
// foreach (var c in m_constraints)
// {
// EditorGUILayout.ObjectField(c.ConstraintTarget, typeof(MonoBehaviour), true);
// }
// }
// }
// }
}
}