mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-02 11:15:32 -05:00
88 lines
2.7 KiB
C#
88 lines
2.7 KiB
C#
using System.Text;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace UniVRM10
|
|
{
|
|
[CustomEditor(typeof(VRM10AimConstraint))]
|
|
public class VRM10AimConstraintEditor : Editor
|
|
{
|
|
VRM10AimConstraint m_target;
|
|
|
|
void OnEnable()
|
|
{
|
|
m_target = (VRM10AimConstraint)target;
|
|
}
|
|
|
|
static GUIStyle s_style;
|
|
static GUIStyle Style
|
|
{
|
|
get
|
|
{
|
|
if (s_style == null)
|
|
{
|
|
s_style = new GUIStyle("box");
|
|
}
|
|
return s_style;
|
|
}
|
|
}
|
|
|
|
static void DrawAimUp(Quaternion rot, Vector3 pos, Color c)
|
|
{
|
|
Handles.matrix = Matrix4x4.identity;
|
|
Handles.color = c;
|
|
// aim
|
|
var aim = pos + rot * Vector3.forward * 0.3f;
|
|
Handles.DrawLine(pos, aim);
|
|
Handles.Label(aim, "aim");
|
|
// up
|
|
var up = pos + rot * Vector3.up * 0.3f;
|
|
Handles.DrawLine(pos, up);
|
|
Handles.Label(up, "up");
|
|
}
|
|
|
|
public void OnSceneGUI()
|
|
{
|
|
if (m_target.Source == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// this to target line
|
|
Handles.color = Color.yellow;
|
|
Handles.DrawLine(m_target.Source.position, m_target.transform.position);
|
|
|
|
var pos = m_target.transform.position;
|
|
|
|
var pr = TR.FromParent(m_target.transform);
|
|
|
|
if (m_target.m_src == null)
|
|
{
|
|
EditorGUI.BeginChangeCheck();
|
|
TR.FromWorld(m_target.transform).Draw(0.2f);
|
|
|
|
Handles.matrix = Matrix4x4.identity;
|
|
var rot = Handles.RotationHandle(pr.Rotation * m_target.DestinationOffset, pos);
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
Undo.RecordObject(m_target, "Rotated RotateAt Point");
|
|
m_target.DestinationOffset = Quaternion.Inverse(pr.Rotation) * rot;
|
|
}
|
|
|
|
DrawAimUp(rot, pos, Color.yellow);
|
|
}
|
|
else
|
|
{
|
|
var init = pr.Rotation * m_target.m_src.LocalInitial.Rotation;
|
|
DrawAimUp(init * m_target.DestinationOffset, m_target.transform.position, Color.yellow);
|
|
new TR(init, m_target.transform.position).Draw(0.2f);
|
|
DrawAimUp(init * m_target.DestinationOffset * m_target.Delta, m_target.transform.position, Color.magenta);
|
|
}
|
|
|
|
// Target UPVector
|
|
Handles.color = Color.green;
|
|
Handles.DrawLine(m_target.transform.position, m_target.transform.position + m_target.UpVector);
|
|
}
|
|
}
|
|
}
|