mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-16 07:34:05 -05:00
Merge pull request #2591 from ousttrue/fix/curvemap_editor
[LookAt] VRM10ObjectLookAtEditor
This commit is contained in:
commit
c240f6c3ef
|
|
@ -59,12 +59,12 @@ namespace UniVRM10
|
|||
m_showJointSettings = EditorGUILayout.Foldout(m_showJointSettings, "Joint Settings");
|
||||
if (m_showJointSettings)
|
||||
{
|
||||
LimitBreakSlider(m_stiffnessForceProp, 0.0f, 4.0f, 0.0f, Mathf.Infinity);
|
||||
LimitBreakSlider(m_gravityPowerProp, 0.0f, 2.0f, 0.0f, Mathf.Infinity);
|
||||
Vrm10EditorUtility.LimitBreakSlider(m_stiffnessForceProp, 0.0f, 4.0f, 0.0f, Mathf.Infinity);
|
||||
Vrm10EditorUtility.LimitBreakSlider(m_gravityPowerProp, 0.0f, 2.0f, 0.0f, Mathf.Infinity);
|
||||
EditorGUILayout.PropertyField(m_gravityDirProp);
|
||||
EditorGUILayout.PropertyField(m_dragForceProp);
|
||||
EditorGUILayout.Space();
|
||||
LimitBreakSlider(m_jointRadiusProp, 0.0f, 0.5f, 0.0f, Mathf.Infinity);
|
||||
Vrm10EditorUtility.LimitBreakSlider(m_jointRadiusProp, 0.0f, 0.5f, 0.0f, Mathf.Infinity);
|
||||
}
|
||||
|
||||
if (serializedObject.ApplyModifiedProperties())
|
||||
|
|
@ -143,53 +143,6 @@ namespace UniVRM10
|
|||
return jointIndex == (spring.Joints.Count - 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// スライダーと数値入力で限界値の違う、所謂「限界突破スライダー」を作成する
|
||||
/// `EditorGUILayout.PropertyField` の代替として利用する
|
||||
/// </summary>
|
||||
private static void LimitBreakSlider(SerializedProperty property, float sliderLeft, float sliderRight, float numberLeft, float numberRight)
|
||||
{
|
||||
var label = new GUIContent(property.displayName);
|
||||
var currentValue = property.floatValue;
|
||||
|
||||
var rect = EditorGUILayout.GetControlRect();
|
||||
|
||||
EditorGUI.BeginProperty(rect, label, property);
|
||||
|
||||
rect = EditorGUI.PrefixLabel(rect, label);
|
||||
|
||||
// slider
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
|
||||
var sliderRect = rect;
|
||||
sliderRect.width -= 55.0f;
|
||||
rect.xMin += rect.width - 50.0f;
|
||||
|
||||
var clampedvalue = Mathf.Clamp(currentValue, sliderLeft, sliderRight);
|
||||
var sliderValue = GUI.HorizontalSlider(sliderRect, clampedvalue, sliderLeft, sliderRight);
|
||||
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
property.floatValue = sliderValue;
|
||||
}
|
||||
}
|
||||
|
||||
// number
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
|
||||
var numberValue = Mathf.Clamp(EditorGUI.FloatField(rect, currentValue), numberLeft, numberRight);
|
||||
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
property.floatValue = numberValue;
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
|
||||
void OnSceneGUI()
|
||||
{
|
||||
if (m_root == null)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace UniVRM10
|
|||
// for SerializedProperty
|
||||
SerializedPropertyEditor m_expression;
|
||||
SerializedPropertyEditor m_meta;
|
||||
SerializedPropertyEditor m_lookAt;
|
||||
VRM10ObjectLookAtEditor m_lookAt;
|
||||
SerializedPropertyEditor m_firstPerson;
|
||||
SerializedProperty m_prefab;
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ namespace UniVRM10
|
|||
|
||||
m_expression = SerializedPropertyEditor.Create(serializedObject, nameof(m_target.Expression));
|
||||
m_meta = VRM10MetaEditor.Create(serializedObject);
|
||||
m_lookAt = SerializedPropertyEditor.Create(serializedObject, nameof(m_target.LookAt));
|
||||
m_lookAt = new(serializedObject);
|
||||
m_firstPerson = SerializedPropertyEditor.Create(serializedObject, nameof(m_target.FirstPerson));
|
||||
|
||||
m_prefab = serializedObject.FindProperty("m_prefab");
|
||||
|
|
|
|||
87
Assets/VRM10/Editor/Components/VRM10ObjectLookAtEditor.cs
Normal file
87
Assets/VRM10/Editor/Components/VRM10ObjectLookAtEditor.cs
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
using UniGLTF.Extensions.VRMC_vrm;
|
||||
using UnityEditor;
|
||||
|
||||
namespace UniVRM10
|
||||
{
|
||||
public class VRM10ObjectLookAtEditor
|
||||
{
|
||||
private readonly SerializedObject _serializedObject;
|
||||
private readonly SerializedProperty _OffsetFromHead;
|
||||
private readonly SerializedProperty _LookAtType;
|
||||
|
||||
|
||||
class CurveMapEditor
|
||||
{
|
||||
private readonly SerializedProperty _CurveXRangeDegree;
|
||||
private readonly SerializedProperty _CurveYRangeDegree;
|
||||
private readonly string _name;
|
||||
|
||||
public CurveMapEditor(SerializedObject serializedObject, string name)
|
||||
{
|
||||
_CurveXRangeDegree = serializedObject.FindProperty($"LookAt.{name}.CurveXRangeDegree");
|
||||
_CurveYRangeDegree = serializedObject.FindProperty($"LookAt.{name}.CurveYRangeDegree");
|
||||
_name = name;
|
||||
}
|
||||
|
||||
public void OnInspectorGUI(float yMax)
|
||||
{
|
||||
EditorGUILayout.LabelField(_name);
|
||||
EditorGUI.indentLevel++;
|
||||
Vrm10EditorUtility.LimitBreakSlider(_CurveXRangeDegree, 0, 90.0f, 0, 90.0f);
|
||||
Vrm10EditorUtility.LimitBreakSlider(_CurveYRangeDegree, 0, yMax, 0, 90.0f);
|
||||
EditorGUI.indentLevel--;
|
||||
EditorGUILayout.Space();
|
||||
}
|
||||
}
|
||||
private readonly CurveMapEditor _HorizontalOuter;
|
||||
private readonly CurveMapEditor _HorizontalInner;
|
||||
private readonly CurveMapEditor _VerticalDown;
|
||||
private readonly CurveMapEditor _VerticalUp;
|
||||
|
||||
public VRM10ObjectLookAtEditor(SerializedObject serializedObject)
|
||||
{
|
||||
_serializedObject = serializedObject;
|
||||
_OffsetFromHead = serializedObject.FindProperty("LookAt.OffsetFromHead");
|
||||
_LookAtType = serializedObject.FindProperty("LookAt.LookAtType");
|
||||
_HorizontalOuter = new(serializedObject, "HorizontalOuter");
|
||||
_HorizontalInner = new(serializedObject, "HorizontalInner");
|
||||
_VerticalDown = new(serializedObject, "VerticalDown");
|
||||
_VerticalUp = new(serializedObject, "VerticalUp");
|
||||
}
|
||||
|
||||
public void OnInspectorGUI()
|
||||
{
|
||||
EditorGUILayout.PropertyField(_OffsetFromHead);
|
||||
EditorGUILayout.PropertyField(_LookAtType);
|
||||
EditorGUILayout.Space();
|
||||
|
||||
switch ((LookAtType)_LookAtType.enumValueIndex)
|
||||
{
|
||||
case LookAtType.bone:
|
||||
{
|
||||
EditorGUILayout.HelpBox("Degree Input (0-90) => EyeBone Degree(0-90)", MessageType.Info);
|
||||
_HorizontalOuter.OnInspectorGUI(90);
|
||||
_HorizontalInner.OnInspectorGUI(90);
|
||||
_VerticalDown.OnInspectorGUI(90);
|
||||
_VerticalUp.OnInspectorGUI(90);
|
||||
}
|
||||
break;
|
||||
|
||||
case LookAtType.expression:
|
||||
{
|
||||
EditorGUILayout.HelpBox("Degree Input (0-90) => Expression Weight(0-1.0)", MessageType.Info);
|
||||
_HorizontalOuter.OnInspectorGUI(1);
|
||||
_HorizontalInner.OnInspectorGUI(1);
|
||||
_VerticalDown.OnInspectorGUI(1);
|
||||
_VerticalUp.OnInspectorGUI(1);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
_serializedObject.ApplyModifiedProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: d31d0e4c86e078746b74b86dc473e15a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
55
Assets/VRM10/Editor/Vrm10EditorUtility.cs
Normal file
55
Assets/VRM10/Editor/Vrm10EditorUtility.cs
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UniVRM10
|
||||
{
|
||||
public static class Vrm10EditorUtility
|
||||
{
|
||||
/// <summary>
|
||||
/// スライダーと数値入力で限界値の違う、所謂「限界突破スライダー」を作成する
|
||||
/// `EditorGUILayout.PropertyField` の代替として利用する
|
||||
/// </summary>
|
||||
public static void LimitBreakSlider(SerializedProperty property, float sliderLeft, float sliderRight, float numberLeft, float numberRight)
|
||||
{
|
||||
var label = new GUIContent(property.displayName);
|
||||
var currentValue = property.floatValue;
|
||||
|
||||
var rect = EditorGUILayout.GetControlRect();
|
||||
|
||||
EditorGUI.BeginProperty(rect, label, property);
|
||||
|
||||
rect = EditorGUI.PrefixLabel(rect, label);
|
||||
|
||||
// slider
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
|
||||
var sliderRect = rect;
|
||||
sliderRect.width -= 55.0f;
|
||||
rect.xMin += rect.width - 50.0f;
|
||||
|
||||
var clampedvalue = Mathf.Clamp(currentValue, sliderLeft, sliderRight);
|
||||
var sliderValue = GUI.HorizontalSlider(sliderRect, clampedvalue, sliderLeft, sliderRight);
|
||||
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
property.floatValue = sliderValue;
|
||||
}
|
||||
}
|
||||
|
||||
// number
|
||||
{
|
||||
EditorGUI.BeginChangeCheck();
|
||||
|
||||
var numberValue = Mathf.Clamp(EditorGUI.FloatField(rect, currentValue), numberLeft, numberRight);
|
||||
|
||||
if (EditorGUI.EndChangeCheck())
|
||||
{
|
||||
property.floatValue = numberValue;
|
||||
}
|
||||
}
|
||||
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/VRM10/Editor/Vrm10EditorUtility.cs.meta
Normal file
11
Assets/VRM10/Editor/Vrm10EditorUtility.cs.meta
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 4b75cffea6a5f03418a9a698a32c15cb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -7,10 +7,20 @@ namespace UniVRM10
|
|||
[Serializable]
|
||||
public class CurveMapper
|
||||
{
|
||||
[Range(20.0f, 90.0f)]
|
||||
/// <summary>
|
||||
/// v0.128.3 VRM10ObjectLookAtEditor
|
||||
///
|
||||
/// DegreeINput 0-90
|
||||
/// </summary>
|
||||
public float CurveXRangeDegree;
|
||||
|
||||
[Range(0, 90.0f)]
|
||||
/// <summary>
|
||||
/// v0.128.3 VRM10ObjectLookAtEditor
|
||||
///
|
||||
/// EyeBoneDegree 0-90
|
||||
/// or
|
||||
/// ExpressionWeight 0-1.0
|
||||
/// </summary>
|
||||
public float CurveYRangeDegree;
|
||||
|
||||
public CurveMapper(float xRange, float yRange)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user