using UnityEngine; namespace RootMotion { public class AxisTools { public static Vector3 ToVector3(Axis axis) { return axis switch { Axis.X => Vector3.right, Axis.Y => Vector3.up, _ => Vector3.forward, }; } public static Axis ToAxis(Vector3 v) { float num = Mathf.Abs(v.x); float num2 = Mathf.Abs(v.y); float num3 = Mathf.Abs(v.z); Axis result = Axis.X; if (num2 > num && num2 > num3) { result = Axis.Y; } if (num3 > num && num3 > num2) { result = Axis.Z; } return result; } public static Axis GetAxisToPoint(Transform t, Vector3 worldPosition) { Vector3 axisVectorToPoint = GetAxisVectorToPoint(t, worldPosition); if (axisVectorToPoint == Vector3.right) { return Axis.X; } if (axisVectorToPoint == Vector3.up) { return Axis.Y; } return Axis.Z; } public static Axis GetAxisToDirection(Transform t, Vector3 direction) { Vector3 axisVectorToDirection = GetAxisVectorToDirection(t, direction); if (axisVectorToDirection == Vector3.right) { return Axis.X; } if (axisVectorToDirection == Vector3.up) { return Axis.Y; } return Axis.Z; } public static Vector3 GetAxisVectorToPoint(Transform t, Vector3 worldPosition) { return GetAxisVectorToDirection(t, worldPosition - t.position); } public static Vector3 GetAxisVectorToDirection(Transform t, Vector3 direction) { return GetAxisVectorToDirection(t.rotation, direction); } public static Vector3 GetAxisVectorToDirection(Quaternion r, Vector3 direction) { direction = direction.normalized; Vector3 result = Vector3.right; float num = Mathf.Abs(Vector3.Dot(r * Vector3.right, direction)); float num2 = Mathf.Abs(Vector3.Dot(r * Vector3.up, direction)); if (num2 > num) { result = Vector3.up; } float num3 = Mathf.Abs(Vector3.Dot(r * Vector3.forward, direction)); if (num3 > num && num3 > num2) { result = Vector3.forward; } return result; } } }