diff --git a/Assets/VRM10/Editor/Components/VRM10ControllerEditor.cs b/Assets/VRM10/Editor/Components/VRM10ControllerEditor.cs index 4d3309419..00484dcf6 100644 --- a/Assets/VRM10/Editor/Components/VRM10ControllerEditor.cs +++ b/Assets/VRM10/Editor/Components/VRM10ControllerEditor.cs @@ -2,7 +2,7 @@ using UnityEditor; using UnityEngine; using System.Linq; -using VrmLib; + namespace UniVRM10 { @@ -57,7 +57,6 @@ namespace UniVRM10 m_expression = PropGui.FromObject(serializedObject, nameof(m_target.Expression)); m_lookAt = PropGui.FromObject(serializedObject, nameof(m_target.LookAt)); m_firstPerson = PropGui.FromObject(serializedObject, nameof(m_target.FirstPerson)); - m_springBone = PropGui.FromObject(serializedObject, nameof(m_target.SpringBone)); } void OnDisable() @@ -76,7 +75,6 @@ namespace UniVRM10 Expression, LookAt, FirstPerson, - SpringBone, } Tabs _tab; @@ -118,7 +116,6 @@ namespace UniVRM10 PropGui m_expression; PropGui m_lookAt; PropGui m_firstPerson; - PropGui m_springBone; PropGui m_asset; public override void OnInspectorGUI() @@ -161,10 +158,6 @@ namespace UniVRM10 case Tabs.FirstPerson: m_firstPerson.RecursiveProperty(); break; - - case Tabs.SpringBone: - m_springBone.RecursiveProperty(); - break; } serializedObject.ApplyModifiedProperties(); diff --git a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBone.cs b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBone.cs index ee75cabbe..f834791c5 100644 --- a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBone.cs +++ b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBone.cs @@ -8,9 +8,16 @@ namespace UniVRM10 /// /// The base algorithm is http://rocketjump.skr.jp/unity3d/109/ of @ricopin416 /// DefaultExecutionOrder(11000) means calculate springbone after FinalIK( VRIK ) + /// + /// Setup の Editor の都合から、VRM10SpringBone は MonoBehaviour にする。 + /// Data置き場。Updateは使わない。 + /// + /// Springの根元のTranform (Joints.First()) に AddComponent して使う。 + /// /// + [DisallowMultipleComponent] [Serializable] - public class VRM10SpringBone + public class VRM10SpringBone : MonoBehaviour { [SerializeField] public string Comment; diff --git a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneColliderGroup.cs b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneColliderGroup.cs index 2fb4e3a58..149f59bde 100644 --- a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneColliderGroup.cs +++ b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneColliderGroup.cs @@ -7,7 +7,6 @@ namespace UniVRM10 /// /// VRMC_node_collider /// - [DisallowMultipleComponent] [AddComponentMenu("VRM10/VRM10SpringBoneColliderGroup")] public class VRM10SpringBoneColliderGroup : MonoBehaviour { diff --git a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneManager.cs b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneManager.cs deleted file mode 100644 index 1eea53e46..000000000 --- a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneManager.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace UniVRM10 -{ - /// - /// すべての SpringBone を管理する。 - /// Humanoid 一体につきひとつだけ存在する。 - /// - [Serializable] - public class VRM10SpringBoneManager - { - [SerializeField, Header("Gizmo")] - bool m_drawGizmo = default; - - [SerializeField] - Color m_gizmoColor = Color.yellow; - - - [SerializeField] - public List Springs = new List(); - - - /// - /// 1フレームに一回呼び出す(VRM10Controllerの仕事) - /// - public void Process() - { - foreach (var spring in Springs) - { - spring.Process(); - } - } - - public void DrawGizmos() - { - if (m_drawGizmo) - { - foreach (var spring in Springs) - { - spring.DrawGizmo(m_gizmoColor); - } - } - } - } -} diff --git a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneManager.cs.meta b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneManager.cs.meta deleted file mode 100644 index 7a973865a..000000000 --- a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d09e28f7198c42d42bb31fd40e164b2d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/VRM10/Runtime/Components/VRM10Controller.cs b/Assets/VRM10/Runtime/Components/VRM10Controller.cs index 08fdaa697..631a89290 100644 --- a/Assets/VRM10/Runtime/Components/VRM10Controller.cs +++ b/Assets/VRM10/Runtime/Components/VRM10Controller.cs @@ -44,9 +44,6 @@ namespace UniVRM10 [SerializeField] public VRM10ControllerFirstPerson FirstPerson = new VRM10ControllerFirstPerson(); - [SerializeField] - public VRM10SpringBoneManager SpringBone = new VRM10SpringBoneManager(); - void OnDestroy() { if (Expression != null) @@ -55,6 +52,8 @@ namespace UniVRM10 } } + VRM10SpringBone[] m_springs; + VRM10Constraint[] m_constraints; Transform m_head; @@ -123,7 +122,14 @@ namespace UniVRM10 // // spring // - SpringBone.Process(); + if (m_springs == null) + { + m_springs = GetComponentsInChildren(); + } + foreach (var spring in m_springs) + { + spring.Process(); + } // // gaze control @@ -156,10 +162,5 @@ namespace UniVRM10 Process(); } } - - private void OnDrawGizmos() - { - SpringBone.DrawGizmos(); - } } } diff --git a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs index f5c4dd71d..493540f0b 100644 --- a/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs +++ b/Assets/VRM10/Runtime/IO/RuntimeUnityBuilder.cs @@ -346,14 +346,17 @@ namespace UniVRM10 { await awaitCaller.NextFrame(); - var springBoneManager = controller.SpringBone; - // springs if (gltfVrmSpringBone.Springs != null) { foreach (var gltfSpring in gltfVrmSpringBone.Springs) { - var springBone = new VRM10SpringBone(); + if (gltfSpring.Joints == null || gltfSpring.Joints.Count == 0) + { + continue; + } + var firstJointNode = Nodes[gltfSpring.Joints.First().Node.Value]; + var springBone = firstJointNode.gameObject.AddComponent(); springBone.Comment = gltfSpring.Name; // joint @@ -422,8 +425,6 @@ namespace UniVRM10 return null; } }).Where(x => x != null)); - - springBoneManager.Springs.Add(springBone); } } } diff --git a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs index 6053448b2..78cfd6a61 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs @@ -295,11 +295,6 @@ namespace UniVRM10 UniGLTF.Extensions.VRMC_springBone.VRMC_springBone ExportSpringBone(VRM10Controller vrmController, Model model, RuntimeVrmConverter converter) { - if (vrmController?.SpringBone?.Springs == null || vrmController.SpringBone.Springs.Count == 0) - { - return null; - } - var springBone = new UniGLTF.Extensions.VRMC_springBone.VRMC_springBone { Springs = new List(), @@ -311,7 +306,7 @@ namespace UniVRM10 return model.Nodes.IndexOf(node); }; - foreach (var x in vrmController.SpringBone.Springs) + foreach (var x in vrmController.GetComponentsInChildren()) { var spring = new UniGLTF.Extensions.VRMC_springBone.Spring {