@@ -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
0 commit comments