# Vector3 Rotate Around

I have been using Transform.RotateAround to rotate a transform around a pivot but now I need to rotate a `Vector3` around a point and I am stumped how to do it.

I am honistly considering backing up a transform's position and rotate and using it to hold my point but that would be poor programing. So my question is, is there a function to rotate a `Vector3` around a pivot?

Thanks

I don't know of any built-in function, but you could create your own. Here's a quick example of something you could do.

``````static function RotateAroundPoint(point : Vector3, pivot : Vector3, angle : Quaternion) : Vector3 {
var finalPos : Vector3 = point - pivot;
//Center the point around the origin
finalPos = angle * finalPos;
//Rotate the point.

finalPos += pivot;
//Move the point back to its original offset.

return finalPos;
}

``````

You can create the angle using Quaternion.Euler();

``````var newPos = SomeClass.RotateAroundPoint(Vector3.forward, Vector3.zero, Quaternion.Euler(0, 90, 0) );
Debug.Log(newPos);
//Prints (1, 0, 0) or is it (-1, 0, 0 )?  Something like this. :)

``````

I think the solutions provided above can be improved a little more.
These are extension methods, which behave as if they actually were memebers of Vector3 and Transform.
(As if RotateAround would still exist)

``````public static class RotateAroundPivotExtensions {
//Returns the rotated Vector3 using a Quaterion
public static Vector3 RotateAroundPivot(this Vector3 Point, Vector3 Pivot, Quaternion Angle) {
return Angle * (Point - Pivot) + Pivot;
}
//Returns the rotated Vector3 using Euler
public static Vector3 RotateAroundPivot(this Vector3 Point, Vector3 Pivot, Vector3 Euler) {
return RotateAroundPivot(Point, Pivot, Quaternion.Euler(Euler));
}
//Rotates the Transform's position using a Quaterion
public static void RotateAroundPivot(this Transform Me, Vector3 Pivot, Quaternion Angle) {
Me.position = Me.position.RotateAroundPivot(Pivot, Angle);
}
//Rotates the Transform's position using Euler
public static void RotateAroundPivot(this Transform Me, Vector3 Pivot, Vector3 Euler) {
Me.position = Me.position.RotateAroundPivot(Pivot, Quaternion.Euler(Euler));
}
}

/*USAGE:
*
* myGameObject.transform.RotateAroundPivot(CenterAsVector3, AngleAsVector3); //Modifies the Transform (immediate rotation)
* myGameObject.transform.position.RotateAroundPivot(CenterAsVector3, AngleAsVector3); //Returns the rotated position (preview rotation)
*
*/
``````