From 80c2bb921c1c9b8b005ae6c1e373d5cef662a601 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 18 Jul 2024 12:57:54 +0900 Subject: [PATCH] TransformIndexMap to Array.IndexOf --- .../Vrm10Runtime/Vrm10RuntimeSpringBone .cs | 5 +++-- .../InputPorts/FastSpringBoneBufferBuilder.cs | 18 +++++++----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeSpringBone .cs b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeSpringBone .cs index 9e5e82d55..d55439841 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeSpringBone .cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Runtime/Vrm10RuntimeSpringBone .cs @@ -143,9 +143,10 @@ namespace UniVRM10 public void RestoreInitialTransform() { // Spring の joint に対応する transform の回転を初期状態 - foreach (var (k, v) in m_initialData.TransformIndexMap) + for (int i = 0; i < m_initialData.Transforms.Length; ++i) { - k.localRotation = v.InitialLocalRotation; + var transform = m_initialData.Transforms[i]; + transform.localRotation = m_initialData.InitialLocalRotations[i]; } // 初期状態にしたtransformを使って spring logic を構築 diff --git a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneBufferBuilder.cs b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneBufferBuilder.cs index 7c17a0869..5d348d1aa 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneBufferBuilder.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/InputPorts/FastSpringBoneBufferBuilder.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using Unity.Collections; @@ -14,12 +15,12 @@ namespace UniVRM10.FastSpringBones.System public readonly List BlittableColliders = new(); public readonly List BlittableLogics = new(); public readonly Transform[] Transforms; + public readonly Quaternion[] InitialLocalRotations; public struct TransformInfo { public int Index; public Quaternion InitialLocalRotation; } - public readonly IDictionary TransformIndexMap; public readonly FastSpringBoneSpring[] Springs; public FastSpringBoneBufferBuilder(FastSpringBoneSpring[] springs) @@ -43,12 +44,7 @@ namespace UniVRM10.FastSpringBones.System if (spring.center != null) transformHashSet.Add(spring.center); } Transforms = transformHashSet.ToArray(); - TransformIndexMap = Transforms.Select((trs, index) => (trs, index)) - .ToDictionary(tuple => tuple.trs, tuple => new TransformInfo - { - Index = tuple.index, - InitialLocalRotation = tuple.trs.localRotation, - }); + InitialLocalRotations = Transforms.Select(x => x.localRotation).ToArray(); foreach (var spring in springs) { @@ -64,14 +60,14 @@ namespace UniVRM10.FastSpringBones.System startIndex = BlittableJoints.Count, count = spring.joints.Length - 1, }, - centerTransformIndex = spring.center ? TransformIndexMap[spring.center].Index : -1, + centerTransformIndex = Array.IndexOf(Transforms, spring.center), }; BlittableSprings.Add(blittableSpring); BlittableColliders.AddRange(spring.colliders.Select(collider => { var blittable = collider.Collider; - blittable.transformIndex = TransformIndexMap[collider.Transform].Index; + blittable.transformIndex = Array.IndexOf(Transforms, collider.Transform); return blittable; })); BlittableJoints.AddRange(spring.joints @@ -127,8 +123,8 @@ namespace UniVRM10.FastSpringBones.System var parent = joint.Transform.parent; BlittableLogics.Add(new BlittableLogic { - headTransformIndex = TransformIndexMap[joint.Transform].Index, - parentTransformIndex = parent != null ? TransformIndexMap[parent].Index : -1, + headTransformIndex = Array.IndexOf(Transforms, joint.Transform), + parentTransformIndex = Array.IndexOf(Transforms, parent), currentTail = currentTail, prevTail = currentTail, localRotation = joint.DefaultLocalRotation,