Skip to content

Commit c92aacf

Browse files
committed
replace mathematics
1 parent ec9b7df commit c92aacf

3 files changed

Lines changed: 26 additions & 25 deletions

File tree

Assets/uSpringBone/Script/Core/SpringBone.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ public class SpringBone : MonoBehaviour
1717
/// </summary>
1818
public struct Data
1919
{
20-
public Vector3 localPosition;
21-
public Vector3 grobalPosition;
22-
public Vector3 currentEndpoint;
23-
public Vector3 previousEndpoint;
24-
public Quaternion localRotation;
25-
public Quaternion grobalRotation;
26-
public Vector3 boneAxis;
20+
public float3 localPosition;
21+
public float3 grobalPosition;
22+
public float3 currentEndpoint;
23+
public float3 previousEndpoint;
24+
public quaternion localRotation;
25+
public quaternion grobalRotation;
26+
public float3 boneAxis;
2727
public float radius;
2828
public float stiffnessForce;
2929
public float dragForce;
30-
public Vector3 springForce;
30+
public float3 springForce;
3131
public float springLength;
3232
public int isRootChild;
3333

Assets/uSpringBone/Script/Core/SpringBoneChain.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public class SpringBoneChain : MonoBehaviour
2828
/// </summary>
2929
public struct ParentData
3030
{
31-
public Vector3 grobalPosition;
32-
public Quaternion grobalRotation;
31+
public float3 grobalPosition;
32+
public quaternion grobalRotation;
3333
}
3434

3535
/// <summary>
@@ -55,8 +55,8 @@ public unsafe void Execute()
5555
boneDataHeadPtr = (BoneData*)boneData.GetUnsafePtr();
5656
colliderDataHeadPtr = (ColliderData*)colliderData.GetUnsafeReadOnlyPtr();
5757

58-
Vector3 parentPosition = Vector3.zero;
59-
Quaternion parentRotation = Quaternion.identity;
58+
float3 parentPosition = Vector3.zero;
59+
quaternion parentRotation = quaternion.identity;
6060
var sqrDt = dt * dt;
6161
var parentIndex = 0;
6262

@@ -73,41 +73,41 @@ public unsafe void Execute()
7373

7474
var localPosition = boneDataPtr -> localPosition;
7575
var localRotation = boneDataPtr -> localRotation;
76-
var grobalPosition = parentPosition + parentRotation * localPosition;
77-
var grobalRotation = parentRotation * localRotation;
76+
var grobalPosition = parentPosition + math.mul(parentRotation, localPosition);
77+
var grobalRotation = math.mul(parentRotation, localRotation);
7878

7979
// calculate force
80-
Vector3 force = grobalRotation * (boneDataPtr -> boneAxis * boneDataPtr -> stiffnessForce) / sqrDt;
80+
float3 force = math.mul(grobalRotation, (boneDataPtr -> boneAxis * boneDataPtr -> stiffnessForce)) / sqrDt;
8181
force += (boneDataPtr -> previousEndpoint - boneDataPtr -> currentEndpoint) * boneDataPtr -> dragForce / sqrDt;
8282
force += boneDataPtr -> springForce / sqrDt;
8383

84-
Vector3 temp = boneDataPtr -> currentEndpoint;
84+
float3 temp = boneDataPtr -> currentEndpoint;
8585
var dataTemp = boneData[i];
8686

8787
// calculate next endpoint position
8888
dataTemp.currentEndpoint = (dataTemp.currentEndpoint - dataTemp.previousEndpoint) + dataTemp.currentEndpoint + (force * sqrDt);
89-
dataTemp.currentEndpoint = ((dataTemp.currentEndpoint - grobalPosition).normalized * dataTemp.springLength) + grobalPosition;
89+
dataTemp.currentEndpoint = (math.normalize(dataTemp.currentEndpoint - grobalPosition) * dataTemp.springLength) + grobalPosition;
9090

9191
// collision
9292
for (int j = 0; j < colliderData.Length; j++)
9393
{
9494
var colliderDataPtr = (colliderDataHeadPtr + j);
95-
if (Vector3.Distance(dataTemp.currentEndpoint, colliderDataPtr -> grobalPosition) <= (boneDataPtr -> radius + colliderDataPtr -> radius))
95+
if (math.distance(dataTemp.currentEndpoint, colliderDataPtr -> grobalPosition) <= (boneDataPtr -> radius + colliderDataPtr -> radius))
9696
{
97-
Vector3 normal = (dataTemp.currentEndpoint - colliderDataPtr -> grobalPosition).normalized;
97+
float3 normal = math.normalize(dataTemp.currentEndpoint - colliderDataPtr -> grobalPosition);
9898
dataTemp.currentEndpoint = colliderDataPtr -> grobalPosition + (normal * (boneDataPtr -> radius + colliderDataPtr -> radius));
99-
dataTemp.currentEndpoint = ((dataTemp.currentEndpoint - grobalPosition).normalized * dataTemp.springLength) + grobalPosition;
99+
dataTemp.currentEndpoint = (math.normalize(dataTemp.currentEndpoint - grobalPosition) * dataTemp.springLength) + grobalPosition;
100100
}
101101
}
102102

103103
dataTemp.previousEndpoint = temp;
104104

105105
// calculate next rotation
106-
Vector3 currentDirection = parentRotation * boneDataPtr -> boneAxis;
107-
Quaternion targetRotation = Quaternion.FromToRotation(currentDirection, dataTemp.currentEndpoint - grobalPosition);
106+
float3 currentDirection = math.mul(parentRotation, boneDataPtr -> boneAxis);
107+
quaternion targetRotation = Quaternion.FromToRotation(currentDirection, dataTemp.currentEndpoint - grobalPosition);
108108

109-
dataTemp.grobalPosition = parentPosition + parentRotation * localPosition;
110-
dataTemp.grobalRotation = targetRotation * parentRotation;
109+
dataTemp.grobalPosition = parentPosition + math.mul(parentRotation, localPosition);
110+
dataTemp.grobalRotation = math.mul(targetRotation, parentRotation);
111111
parentPosition = dataTemp.grobalPosition;
112112
parentRotation = dataTemp.grobalRotation;
113113

Assets/uSpringBone/Script/Core/SpringBoneCollider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections;
22
using System.Collections.Generic;
33
using UnityEngine;
4+
using Unity.Mathematics;
45

56
namespace Es.uSpringBone
67
{
@@ -21,7 +22,7 @@ public class SpringBoneCollider : MonoBehaviour
2122
public struct Data
2223
{
2324
public float radius;
24-
public Vector3 grobalPosition;
25+
public float3 grobalPosition;
2526

2627
public Data(float radius, Vector3 grobalPosition)
2728
{

0 commit comments

Comments
 (0)