diff --git a/Assets/VRM10/Editor/Vrm10InstanceEditor.cs b/Assets/VRM10/Editor/Vrm10InstanceEditor.cs index 906398682..233efce13 100644 --- a/Assets/VRM10/Editor/Vrm10InstanceEditor.cs +++ b/Assets/VRM10/Editor/Vrm10InstanceEditor.cs @@ -24,6 +24,8 @@ namespace UniVRM10 LookAt, SpringBone, } + static Tab s_selected = default; + static bool s_foldRuntimeLookAt = false; Vrm10Instance m_instance; @@ -226,7 +228,7 @@ namespace UniVRM10 root.Add(s); } - var tabs = new EnumField("select UI", default(Tab)); + var tabs = new EnumField("select UI", s_selected); root.Add(tabs); var body = new VisualElement(); @@ -239,7 +241,7 @@ namespace UniVRM10 foreach (var (tab, content) in contents) { // content.visible = tab == Tab.VrmInstance; - content.style.display = tab == Tab.VrmInstance + content.style.display = tab == s_selected ? DisplayStyle.Flex : DisplayStyle.None ; @@ -249,11 +251,11 @@ namespace UniVRM10 tabs.RegisterValueChangedCallback(e => { - var selected = (Tab)e.newValue; + s_selected = (Tab)e.newValue; foreach (var (tab, content) in contents) { // content.visible = tab == selected; - content.style.display = tab == selected + content.style.display = tab == s_selected ? DisplayStyle.Flex : DisplayStyle.None ; @@ -277,11 +279,80 @@ namespace UniVRM10 void GUILookAt() { + if (!target) + { + return; + } serializedObject.Update(); EditorGUILayout.PropertyField(m_drawLookatGizmo); EditorGUILayout.PropertyField(m_lookatTarget); EditorGUILayout.PropertyField(m_lookatTargetType); serializedObject.ApplyModifiedProperties(); + + // lookat info + if (Application.isPlaying) + { + EditorGUILayout.Space(); + s_foldRuntimeLookAt = EditorGUILayout.Foldout(s_foldRuntimeLookAt, "RuntimeInfo"); + if (s_foldRuntimeLookAt) + { + var enabled = GUI.enabled; + GUI.enabled = false; + EditorGUILayout.Slider("yaw(-180 ~ +180)", m_instance.Runtime.LookAt.Yaw, -180, 180); + EditorGUILayout.Slider("pitch(-90 ~ +90)", m_instance.Runtime.LookAt.Pitch, -90, 90); + if (m_instance.Runtime.LookAt.EyeDirectionApplicable is LookAtEyeDirectionApplicableToBone) + { + EditorGUILayout.LabelField("BoneTYpe"); + } + else if (m_instance.Runtime.LookAt.EyeDirectionApplicable is LookAtEyeDirectionApplicableToExpression) + { + EditorGUILayout.LabelField("ExpressionType"); + var w = m_instance.Runtime.Expression.ActualWeights; + // left + if (w.TryGetValue(ExpressionKey.LookLeft, out var left)) + { + EditorGUILayout.Slider("left", left, 0, 1); + } + else + { + EditorGUILayout.TextField("left"); + } + // right + if (w.TryGetValue(ExpressionKey.LookRight, out var right)) + { + EditorGUILayout.Slider("right", right, 0, 1); + } + else + { + EditorGUILayout.TextField("right"); + } + // up + if (w.TryGetValue(ExpressionKey.LookUp, out var up)) + { + EditorGUILayout.Slider("up", up, 0, 1); + } + else + { + EditorGUILayout.TextField("up"); + } + // down + if (w.TryGetValue(ExpressionKey.LookDown, out var down)) + { + EditorGUILayout.Slider("down", down, 0, 1); + } + else + { + EditorGUILayout.TextField("down"); + } + } + else + { + EditorGUILayout.LabelField($"UnknownTYpe: {m_instance.Runtime.LookAt.EyeDirectionApplicable}"); + } + GUI.enabled = enabled; + Repaint(); + } + } } VisualElement GUISpringBone() diff --git a/Assets/VRM10_Samples/VRM10Viewer/VRM10TargetMover.cs b/Assets/VRM10_Samples/VRM10Viewer/VRM10TargetMover.cs index 9311c436f..7ee334b1f 100644 --- a/Assets/VRM10_Samples/VRM10Viewer/VRM10TargetMover.cs +++ b/Assets/VRM10_Samples/VRM10Viewer/VRM10TargetMover.cs @@ -24,13 +24,16 @@ namespace UniVRM10.VRM10Viewer while (true) { - angle += m_angularVelocity * Time.deltaTime * Mathf.Deg2Rad; + if (this.enabled) + { + angle += m_angularVelocity * Time.deltaTime * Mathf.Deg2Rad; - var x = Mathf.Cos(angle) * m_radius; - var z = Mathf.Sin(angle) * m_radius; - var y = m_y + m_height * Mathf.Cos(angle / 3); + var x = Mathf.Cos(angle) * m_radius; + var z = Mathf.Sin(angle) * m_radius; + var y = m_y + m_height * Mathf.Cos(angle / 3); - transform.localPosition = new Vector3(x, y, z); + transform.localPosition = new Vector3(x, y, z); + } yield return null; }