From 4dc5aae73cfe2be50bc288ef74d442e405943232 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 18 Jul 2024 17:13:31 +0900 Subject: [PATCH] AddLogic to LogicFromTransform --- .../Vrm10Runtime/Vrm10RuntimeSpringBone .cs | 3 ++- .../InputPorts/FastSpringBoneBuffer.cs | 21 ++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeSpringBone .cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeSpringBone .cs index b0e4309f8..2820b1e49 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeSpringBone .cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeSpringBone .cs @@ -155,7 +155,8 @@ namespace UniVRM10 List blittableLogics = new(); foreach (var spring in m_springs) { - FastSpringBoneBuffer.AddLogic(m_fastSpringBoneBuffer.Transforms, blittableLogics, spring); + blittableLogics.AddRange( + FastSpringBoneBuffer.LogicFromTransform(m_fastSpringBoneBuffer.Transforms, spring)); } // DOTS バッファーを更新 m_fastSpringBoneBuffer.SyncAndZeroVelocity(blittableLogics); diff --git a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneBuffer.cs b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneBuffer.cs index e1b8f5027..6d1c55c8b 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneBuffer.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneBuffer.cs @@ -127,7 +127,7 @@ namespace UniVRM10.FastSpringBones.System return blittable; })); - AddLogic(Transforms, blittableLogics, spring); + blittableLogics.AddRange(LogicFromTransform(Transforms, spring)); } Springs = new NativeArray(blittableSprings.ToArray(), Allocator.Persistent); @@ -138,9 +138,17 @@ namespace UniVRM10.FastSpringBones.System Profiler.EndSample(); } - static public void AddLogic(Transform[] Transforms, List BlittableLogics, FastSpringBoneSpring spring) + /// + /// Transform の現状から Logic を作成する。 + /// + /// + /// + /// joint index + /// + public static IEnumerable LogicFromTransform(Transform[] Transforms, FastSpringBoneSpring spring) { - for (var i = 0; i < spring.joints.Length - 1; ++i) + // vrm-1.0 では末端の joint は tail で処理対象でないのに注意! + for (int i = 0; i < spring.joints.Length - 1; ++i) { var joint = spring.joints[i]; var tailJoint = i + 1 < spring.joints.Length ? spring.joints[i + 1] : (FastSpringBoneJoint?)null; @@ -177,17 +185,16 @@ namespace UniVRM10.FastSpringBones.System : worldChildPosition; var parent = joint.Transform.parent; - - BlittableLogics.Add(new BlittableLogic + yield return new BlittableLogic { headTransformIndex = Array.IndexOf(Transforms, joint.Transform), parentTransformIndex = Array.IndexOf(Transforms, parent), currentTail = currentTail, - prevTail = currentTail, + prevTail = currentTail, // same with currentTail. velocity zero. localRotation = joint.DefaultLocalRotation, boneAxis = localChildPosition.normalized, length = localChildPosition.magnitude - }); + }; } }