diff --git a/Aim-IK/AimIKBehaviour2D.cs b/Aim-IK/AimIKBehaviour2D.cs index 6032913..c7c13e5 100644 --- a/Aim-IK/AimIKBehaviour2D.cs +++ b/Aim-IK/AimIKBehaviour2D.cs @@ -28,26 +28,12 @@ private void CheckClamp(Transform part, AxisLimitRotation limitRotation, float r rotation = AimIKFunctions.ClampAngle(part.localEulerAngles.z, limitRotation.min, limitRotation.max); else rotation = part.localEulerAngles.z; - + // Set rotation variables to part rotation Vector3 partRotation = new Vector3(part.localEulerAngles.x, part.localEulerAngles.y, rotation); part.localEulerAngles = partRotation; } - /// - /// Rotates the 2D transforms so the right vector points at worldPosition - /// - /// The transform that should to look at - /// Point to look at - private void LookAt2D(Transform transform, Vector2 worldPosition) - { - Vector2 diff = worldPosition - new Vector2(transform.position.x, transform.position.y); - diff.Normalize(); - - float rotateZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg; - transform.rotation = Quaternion.Euler(0f, 0f, rotateZ); - } - /// /// LateUpdate called after Update and FixedUpdate functions each frames. This function is on top of any animation. /// @@ -60,7 +46,7 @@ private void LateUpdate() { if (chestPart.part && target) // If chest part and target exists { - LookAt2D(chestPart.part, new Vector2(target.position.x, target.position.y) - eyesOffset); + chestPart.part.LookAt2D(new Vector2(target.position.x, target.position.y) - eyesOffset); CheckClamp(chestPart.part, chestPart.limitRotation, chestPart.GetRotation()); } } @@ -69,7 +55,7 @@ private void LateUpdate() // If head and target exists if (head && target) { - LookAt2D(head, new Vector2(target.position.x, target.position.y) - eyesOffset); + head.LookAt2D(new Vector2(target.position.x, target.position.y) - eyesOffset); CheckClamp(head, headLimitRotation, headRotation); } } diff --git a/Aim-IK/Functions.cs b/Aim-IK/Functions.cs index 4e871bc..26c0c91 100644 --- a/Aim-IK/Functions.cs +++ b/Aim-IK/Functions.cs @@ -2,7 +2,7 @@ namespace AimIK.Functions { - public class AimIKFunctions + public static class AimIKFunctions { /// /// Clamp the angle between min and max @@ -57,5 +57,19 @@ private static float NormalizeAngle(float angle) return angle; } + + /// + /// Rotates the 2D transforms so the right vector points at worldPosition + /// + /// The transform that should to look at + /// Point to look at + public static void LookAt2D(this Transform transform, Vector2 worldPosition) + { + Vector2 diff = worldPosition - new Vector2(transform.position.x, transform.position.y); + diff.Normalize(); + + float rotateZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg; + transform.rotation = Quaternion.Euler(0f, 0f, rotateZ); + } } }