mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-24 11:35:24 -05:00
Merge pull request #1731 from ousttrue/fix10/springBoneCollider_PositionHandle
[1.0] SpringBoneCollider の移動ハンドルを実装しました
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eb79df70485ab8548bdd417c7fcbe04a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -41,6 +41,7 @@ namespace UniVRM10
|
||||
Gizmos.color = Color.cyan;
|
||||
Gizmos.DrawWireSphere(Offset, Radius);
|
||||
Gizmos.DrawWireSphere(Tail, Radius);
|
||||
Gizmos.DrawLine(Offset, Tail);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user