82 lines
3.8 KiB
C#
82 lines
3.8 KiB
C#
using UnityEngine;
|
|
|
|
public static class VectorExtensions
|
|
{
|
|
#region Magnitudes
|
|
|
|
public static float SqrMagnitudeXY(this Vector3 vector) => vector.x * vector.x + vector.y * vector.y;
|
|
public static float SqrMagnitudeXZ(this Vector3 vector) => vector.x * vector.x + vector.z * vector.z;
|
|
public static float SqrMagnitudeYZ(this Vector3 vector) => vector.y * vector.y + vector.z * vector.z;
|
|
|
|
public static float MagnitudeXY(this Vector3 vector) => Mathf.Sqrt(vector.x * vector.x + vector.y * vector.y);
|
|
public static float MagnitudeXZ(this Vector3 vector) => Mathf.Sqrt(vector.x * vector.x + vector.z * vector.z);
|
|
public static float MagnitudeYZ(this Vector3 vector) => Mathf.Sqrt(vector.y * vector.y + vector.z * vector.z);
|
|
|
|
public static int CompareMagnitude(this Vector3 vector, Vector3 other) =>
|
|
vector.magnitude.CompareTo(other.magnitude);
|
|
|
|
public static int CompareMagnitudeXY(this Vector3 vector, Vector3 other) =>
|
|
vector.MagnitudeXY().CompareTo(other.MagnitudeXY());
|
|
|
|
public static int CompareMagnitudeXZ(this Vector3 vector, Vector3 other) =>
|
|
vector.MagnitudeXZ().CompareTo(other.MagnitudeXZ());
|
|
|
|
public static int CompareMagnitudeYZ(this Vector3 vector, Vector3 other) =>
|
|
vector.MagnitudeYZ().CompareTo(other.MagnitudeYZ());
|
|
|
|
#endregion
|
|
|
|
#region Normalizing
|
|
|
|
public static Vector3 NormalizeXY(this Vector3 vector) => new Vector2(vector.x, vector.y).normalized;
|
|
public static Vector3 NormalizeXZ(this Vector3 vector) => new Vector2(vector.x, vector.z).normalized;
|
|
public static Vector3 NormalizeYZ(this Vector3 vector) => new Vector2(vector.y, vector.z).normalized;
|
|
|
|
#endregion
|
|
|
|
#region Rotation
|
|
|
|
public static Vector3 ApplyRotateXYZ(this ref Vector3 vector, float eulerX, float eulerY, float eulerZ)
|
|
{
|
|
vector = RotateXYZ(vector, eulerX, eulerY, eulerZ);
|
|
return vector;
|
|
}
|
|
|
|
public static Vector3 ApplyRotateXY(this ref Vector3 vector, float eulerX, float eulerY) =>
|
|
ApplyRotateXYZ(ref vector, eulerX, eulerY, 0);
|
|
|
|
public static Vector3 ApplyRotateXZ(this ref Vector3 vector, float eulerX, float eulerZ) =>
|
|
ApplyRotateXYZ(ref vector, eulerX, 0, eulerZ);
|
|
|
|
public static Vector3 ApplyRotateYZ(this ref Vector3 vector, float eulerY, float eulerZ) =>
|
|
ApplyRotateXYZ(ref vector, 0, eulerY, eulerZ);
|
|
|
|
public static Vector3 ApplyRotateX(this ref Vector3 vector, float eulerX) =>
|
|
ApplyRotateXYZ(ref vector, eulerX, 0, 0);
|
|
|
|
public static Vector3 ApplyRotateY(this ref Vector3 vector, float eulerY) =>
|
|
ApplyRotateXYZ(ref vector, 0, eulerY, 0);
|
|
|
|
public static Vector3 ApplyRotateZ(this ref Vector3 vector, float eulerZ) =>
|
|
ApplyRotateXYZ(ref vector, 0, 0, eulerZ);
|
|
|
|
public static Vector3 RotateXYZ(this Vector3 vector, float eulerX, float eulerY, float eulerZ) =>
|
|
Quaternion.Euler(eulerX, eulerY, eulerZ) * vector;
|
|
|
|
public static Vector3 RotateXY(this Vector3 vector, float eulerX, float eulerY) =>
|
|
RotateXYZ(vector, eulerX, eulerY, 0);
|
|
|
|
public static Vector3 RotateXZ(this Vector3 vector, float eulerX, float eulerZ) =>
|
|
RotateXYZ(vector, eulerX, 0, eulerZ);
|
|
|
|
public static Vector3 RotateYZ(this Vector3 vector, float eulerY, float eulerZ) =>
|
|
RotateXYZ(vector, 0, eulerY, eulerZ);
|
|
|
|
public static Vector3 RotateX(this Vector3 vector, float eulerX) => RotateXYZ(vector, eulerX, 0, 0);
|
|
public static Vector3 RotateY(this Vector3 vector, float eulerY) => RotateXYZ(vector, 0, eulerY, 0);
|
|
public static Vector3 RotateZ(this Vector3 vector, float eulerZ) => RotateXYZ(vector, 0, 0, eulerZ);
|
|
|
|
public static Vector3 RotateAround(this Vector3 vector, float angle, Vector3 axis) => Quaternion.AngleAxis(angle, axis) * vector;
|
|
|
|
#endregion
|
|
} |