/// <summary> /// Pushing spine segment from detected collider /// </summary> public void PushIfSegmentInsideCollider(SpineBone bone, ref Vector3 targetPoint) { // We must translate phantom/reference skeleton positions to true position in world space for collisions Vector3 offset; if (UseTruePosition) { Vector3 theTarget = targetPoint; Vector3 truePosition = bone.FinalPosition; offset = truePosition - theTarget + bone.transform.TransformVector(bone.ColliderOffset + OffsetAllColliders); } else { offset = bone.transform.TransformVector(bone.ColliderOffset + OffsetAllColliders); } if (!DetailedCollision) { for (int i = 0; i < CollidersDataToCheck.Count; i++) { if (CollidersDataToCheck[i].PushIfInside(ref targetPoint, bone.GetCollisionRadiusScaled(), offset)) { return; } } } else { for (int i = 0; i < CollidersDataToCheck.Count; i++) { CollidersDataToCheck[i].PushIfInside(ref targetPoint, bone.GetCollisionRadiusScaled(), offset); } } }