// Gives angle between 2 points. // Unlike Vector3.Angle that gives angle between vectors // Result is between -180..180 or 0..360 // self + Vector.forward is angle 0 // self + Vector.backward is angle 180 private static float AngleFromForward(this Vector3 self, Vector3 other, AngleDomain resultDomain = AngleDomain.From0To360) { float angle = Mathf.Atan2(other.x - self.x, other.z - self.z) * Mathf.Rad2Deg; if (resultDomain == AngleDomain.From0To360) { if (angle < 0) { angle += 360; } } return(angle); }
// Gives angle between 2 points. // Unlike Vector3.Angle that gives angle between vectors // Result is between -180..180 or 0..360 // self + Vector.up is angle 0 // self + Vector.down is angle 180 private static float AngleFromUp( this Vector3 self, Vector3 other, AngleDomain resultDomain = AngleDomain.From0To360 ) { float angle = Mathf.Atan2 ( other.x - self.x, other.y - self.y ) * Mathf.Rad2Deg; if ( resultDomain == AngleDomain.From0To360 ) if ( angle < 0 ) angle += 360; return angle; }
public static float AngleFromForward(this Vector3 self, AngleDomain resultDomain = AngleDomain.From0To360) { return(Vector3.zero.AngleFromForward(self, resultDomain)); }
// public static float AngleFromUp ( this Vector3 self, AngleDomain resultDomain = AngleDomain.From0To360 ) // { // return Vector2.zero.Angle ( self, resultDomain ); // } // Gives angle of this vector around up vector (Z). // Unlike Vector3.Angle that gives angle between vectors // Result is between -180..180 or 0..360 // self + Vector.up is angle 0 // self + Vector.down is angle 180 public static float AngleFromUp( this Vector3 self, AngleDomain resultDomain = AngleDomain.From0To360 ) { return Vector3.zero.AngleFromUp ( self, resultDomain ); }