# Rotate Around Vector

December 02, 2017

UE4 Version: 4.18.3

For this tutorial we are using the standard first person C++ template with starter content. If you don't know how to add a new actor class to your project, please visit the Add C++ Actor Class post.

In this tutorial we'll learn how to rotate an actor around a vector point. Start by creating a new `C++` actor class and call it RotateAroundVector. In the header file we'll create our `float` variables and make it `EditAnywhere` so we can edit it later inside the editor. Below is the final header file code.

### RotateAroundVector.h

``````#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "RotateAroundVector.generated.h"

UCLASS()
class UNREALCPP_API ARotateAroundVector : public AActor
{
GENERATED_BODY()

public:
// Sets default values for this actor's properties
ARotateAroundVector();

protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;

public:
// Called every frame
virtual void Tick(float DeltaTime) override;

// declare our variable for the angle axis
float AngleAxis;

};``````

In the `.cpp` let's start by setting the default value of our `AngleAxis` variable to 0.

#### default values

``````// Called when the game starts or when spawned
void ARotateAroundVector::BeginPlay()
{
Super::BeginPlay();

// init variable AngleAxis to 0 on begin play
AngleAxis = 0;

}``````

All of our logic is going inside the `Tick` function. For this example we are going to use a fixed vector point, so every frame we want to set our fixed location by setting our `NewLocation` to a fixed `FVector`. Then declare how far way you want your actor be from the `NewLocation`. I set the `Radius` at 200 so the actor will always remain 200 unreal units away from the `NewLocation` point.

Next, we want increase `AngleAxis` by one every frame. This will increase the degree around the point the actor should move to. If `AngleAxis` is greater than 360 we re-set the `AngleAxis` to 1. You can look alternative ways of managing `AngleAxis` here and here.

Next, we'll set `RotateValue` by using the `RotateAngleAxis` functions from our `Radius` vector. This will return the amount of units needed to move the actor to its next location. Add `RotateValue`'s X, Y, and Z values to our `NewLocation` variable accordingly. To learn more about the `RotateAngleAxis` function from the Unreal Engine 4 documentation you can click here.

Finally, set the actor's location with `SetActorLocation` to our `NewLocation`.

#### Tick function

``````// Called every frame
void ARotateAroundVector::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);

// declare arbitrary vector point in the world to circle around
FVector NewLocation = FVector (0,0,800);

// declare size of radius to move around

// angle increases by 1 every frame
AngleAxis++;

// prevent number from growind indefinitely
if(AngleAxis > 360.0f) {

AngleAxis = 1;
}

FVector RotateValue = Radius.RotateAngleAxis(AngleAxis, FVector (0,0,1));

NewLocation.X += RotateValue.X;
NewLocation.Y += RotateValue.Y;
NewLocation.Z += RotateValue.Z;

SetActorLocation(NewLocation);

}``````

Compile the code. Drag and drop the new actor into the game world. Add a static mesh component to the actor. Now when you push play the actor will find and circle around the given vector point and always point. Below is the final `.cpp` file.

### RotateAroundVector.cpp

``````#include "RotateAroundVector.h"

// Sets default values
ARotateAroundVector::ARotateAroundVector()
{
// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;

}

// Called when the game starts or when spawned
void ARotateAroundVector::BeginPlay()
{
Super::BeginPlay();

// init variable AngleAxis to 0 on begin play
AngleAxis = 0;

}

// Called every frame
void ARotateAroundVector::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);

// declare arbitrary vector point in the world to circle around
FVector NewLocation = FVector (0,0,800);

// declare size of radius to move around

// angle increases by 1 every frame
AngleAxis++;

// prevent number from growind indefinitely
if(AngleAxis > 360.0f) {

AngleAxis = 1;
}

FVector RotateValue = Radius.RotateAngleAxis(AngleAxis, FVector (0,0,1));

NewLocation.X += RotateValue.X;
NewLocation.Y += RotateValue.Y;
NewLocation.Z += RotateValue.Z;

SetActorLocation(NewLocation);

}``````

### Author 