diff --git a/Scripts/JiggleBone.cs b/Scripts/JiggleBone.cs index d042ec7..713bb8c 100644 --- a/Scripts/JiggleBone.cs +++ b/Scripts/JiggleBone.cs @@ -8,14 +8,15 @@ namespace JigglePhysics { public class JiggleBone { public JiggleBone parent; public JiggleBone child; - public Quaternion boneRotationChangeCheck; + private Quaternion boneRotationChangeCheck; + private Vector3 bonePositionChangeCheck; public Quaternion lastValidPoseBoneRotation; private Vector3 lastValidPoseBoneLocalPosition; public Vector3 targetAnimatedBonePosition; public Vector3 position; public Transform transform; public Vector3 previousPosition; - public Vector3 previousLocalPosition; + //public Vector3 previousLocalPosition; public float lengthToParent; private Vector3 cachedInterpolatedPosition; @@ -44,7 +45,7 @@ public JiggleBone(Transform transform, JiggleBone parent, Vector3 position) { lengthToParent = 0.1f; return; } - previousLocalPosition = parent.transform.InverseTransformPoint(previousPosition); + //previousLocalPosition = parent.transform.InverseTransformPoint(previousPosition); this.parent.child = this; lengthToParent = Vector3.Distance(parent.position, position); } @@ -111,7 +112,7 @@ public Vector3 ConstrainAngle(Vector3 newPosition, float elasticity) { public void SetNewPosition(Vector3 newPosition) { previousPosition = position; - if (parent!=null) previousLocalPosition = parent.transform.InverseTransformPoint(previousPosition); + //if (parent!=null) previousLocalPosition = parent.transform.InverseTransformPoint(previousPosition); position = newPosition; } @@ -143,10 +144,13 @@ public void PrepareBone(bool interpolate) { //cachedInterpolatedPosition = Vector3.Lerp(previousPosition, position, timeSinceLastUpdate/Time.fixedDeltaTime); // If bone is not animated, return to last unadulterated pose - if (transform != null && boneRotationChangeCheck == transform.localRotation) { - //Debug.DrawLine(transform.position, transform.position+lastValidPoseBoneRotation * Vector3.up, Color.magenta); - transform.localRotation = lastValidPoseBoneRotation; - transform.localPosition = lastValidPoseBoneLocalPosition; + if (transform != null) { + if (boneRotationChangeCheck == transform.localRotation) { + transform.localRotation = lastValidPoseBoneRotation; + } + if (bonePositionChangeCheck == transform.localPosition) { + transform.localPosition = lastValidPoseBoneLocalPosition; + } } CacheAnimationPosition(); } @@ -174,6 +178,7 @@ public void PoseBone(float blend) { } if (transform != null) { boneRotationChangeCheck = transform.localRotation; + bonePositionChangeCheck = transform.localPosition; //Debug.DrawLine(transform.position, transform.position+boneRotationChangeCheck * Vector3.up, Color.blue); } } diff --git a/package.json b/package.json index 3d9eb5d..28fb300 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.naelstrof.jigglephysics", "displayName": "Jiggle Physics", - "version": "3.4.1", + "version": "3.4.2", "unity": "2020.3", "description": "Soft-body squash-and-stretch physics for SkinnedMeshRenderers." }