diff --git a/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneConbinedBuffer.cs b/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneConbinedBuffer.cs index f06f3f70a..bae4fd0e9 100644 --- a/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneConbinedBuffer.cs +++ b/Assets/UniGLTF/Runtime/SpringBoneJobs/FastSpringBoneConbinedBuffer.cs @@ -300,6 +300,7 @@ namespace UniGLTF.SpringBoneJobs public void Execute(int springIndex) { var spring = Springs[springIndex]; + var center = spring.centerTransformIndex >= 0 ? Transforms[spring.centerTransformIndex] : (BlittableTransform?)null; for (int jointIndex = spring.logicSpan.startIndex; jointIndex < spring.logicSpan.EndIndex; ++jointIndex) { if (float.IsNaN(CurrentTails[jointIndex].x)) @@ -317,9 +318,10 @@ namespace UniGLTF.SpringBoneJobs } var tail = Transforms[tailIndex]; - CurrentTails[jointIndex] = tail.position; - PrevTails[jointIndex] = tail.position; - NextTails[jointIndex] = tail.position; + var tailPos = center.HasValue ? center.Value.worldToLocalMatrix.MultiplyPoint3x4(tail.position) : tail.position; + CurrentTails[jointIndex] = tailPos; + PrevTails[jointIndex] = tailPos; + NextTails[jointIndex] = tailPos; } } } diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/NativeArrayManager.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/NativeArrayManager.cs index b02250bbb..3fdce7985 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/NativeArrayManager.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/NativeArrayManager.cs @@ -69,8 +69,9 @@ namespace UniGLTF public NativeArray CreateNativeArray(ArraySegment data) where T : struct { var array = CreateNativeArray(data.Count); - for (int i = 0; i < data.Count; i++) - array[i] = data.Array[data.Offset + i]; + var toSpan = array.AsSpan(); + var fromSpan = data.AsSpan(); + fromSpan.CopyTo(toSpan); return array; }