Merge pull request #1731 from ousttrue/fix10/springBoneCollider_PositionHandle

[1.0] SpringBoneCollider の移動ハンドルを実装しました
This commit is contained in:
ousttrue
2022-07-06 18:58:11 +09:00
committed by GitHub
3 changed files with 98 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
using UnityEditor;
using UnityEditor.EditorTools;
using UnityEngine;
namespace UniVRM10
{
[EditorTool("vrm-1.0/SpringBoneCollider", typeof(UniVRM10.VRM10SpringBoneCollider))]
class VRM10SpringBoneColliderEditorTool : EditorTool
{
static GUIContent s_cachedIcon;
public override GUIContent toolbarIcon
{
get
{
if (s_cachedIcon == null)
{
s_cachedIcon = EditorGUIUtility.IconContent("d_editcollision_32", "|vrm-1.0 SpringBoneCollider");
}
return s_cachedIcon;
}
}
void OnEnable()
{
ToolManager.activeToolChanged += ActiveToolDidChange;
}
void OnDisable()
{
ToolManager.activeToolChanged -= ActiveToolDidChange;
}
void ActiveToolDidChange()
{
if (!ToolManager.IsActiveTool(this))
{
return;
}
}
public override void OnToolGUI(EditorWindow window)
{
if (Selection.activeTransform == null)
{
return;
}
var collider = Selection.activeTransform.GetComponent<VRM10SpringBoneCollider>();
if (collider == null)
{
return;
}
Handles.matrix = collider.transform.localToWorldMatrix;
{
Handles.Label(collider.Offset, "Head");
EditorGUI.BeginChangeCheck();
var offset = Handles.PositionHandle(collider.Offset, Quaternion.identity);
var offsetChanged = EditorGUI.EndChangeCheck();
if (offsetChanged)
{
Undo.RecordObject(collider, "SpringBoneCollider");
var delta = offset - collider.Offset;
collider.Offset = offset;
if (collider.ColliderType == VRM10SpringBoneColliderTypes.Capsule)
{
collider.Tail += delta;
}
}
if (collider.ColliderType == VRM10SpringBoneColliderTypes.Capsule)
{
Handles.Label(collider.Tail, "Tail");
EditorGUI.BeginChangeCheck();
var tail = Handles.PositionHandle(collider.Tail, Quaternion.identity);
var tailChanged = EditorGUI.EndChangeCheck();
if (tailChanged)
{
Undo.RecordObject(collider, "SpringBoneCollider");
collider.Tail = tail;
}
}
}
}
}
}

View File

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

View File

@@ -41,6 +41,7 @@ namespace UniVRM10
Gizmos.color = Color.cyan;
Gizmos.DrawWireSphere(Offset, Radius);
Gizmos.DrawWireSphere(Tail, Radius);
Gizmos.DrawLine(Offset, Tail);
break;
}
}