Vrm10EditorUtility.LimitBreakSlider

This commit is contained in:
ousttrue
2025-02-27 13:00:45 +09:00
parent a9696a37b2
commit fb59c601ab
5 changed files with 83 additions and 56 deletions

View File

@@ -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)

View File

@@ -27,10 +27,8 @@ namespace UniVRM10
{
EditorGUILayout.LabelField(_name);
EditorGUI.indentLevel++;
// EditorGUILayout.PropertyField(_CurveXRangeDegree);
_CurveXRangeDegree.floatValue = EditorGUILayout.Slider("CurveXRangeDegree", _CurveXRangeDegree.floatValue, 0, 90.0f);
// EditorGUILayout.PropertyField(_CurveYRangeDegree);
_CurveYRangeDegree.floatValue = EditorGUILayout.Slider("CurveYRangeDegree", _CurveYRangeDegree.floatValue, 0, yMax);
Vrm10EditorUtility.LimitBreakSlider(_CurveXRangeDegree, 0, 90.0f, 0, 90.0f);
Vrm10EditorUtility.LimitBreakSlider(_CurveYRangeDegree, 0, yMax, 0, 90.0f);
EditorGUI.indentLevel--;
EditorGUILayout.Space();
}

View 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();
}
}
}

View File

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

View File

@@ -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)