How can I create a camera the moves independently from a character, but still interact with the character?

I have been pulling my hair out over this, probably because certain UE4 concepts elude me. I want to develop a Warcraft\moba like camera, where i can still interact with a character and yet move the camera indepentently with WASD keys for movement.

Since the player controller controls the character, what controls the camera? The only blueprint that seems to take any input is the player controller. I have setup binds and the furthest i have got is actually making the camera be viewed from.Please help me.

I can show you how I solved it in c++ if you want.

My suggestion would be to make the Camera your player. All player movement is tied to the camera.

For your actual character, you simply have events when you click on the terrain that tells your character to move to that location. He is basically a pawn that you are moving around the board, but you are up in the sky.

Think of it as in League of Legends. You the player are the Summoner. You are telling a hero pawn what to do, but you are not really him.

Sure, that would be great

Hey Zeustiak, I know that this is an old thread, but I’m doing something similar right now. I’ve been using a custom RTS camera until now. After going through the forums, I’m changing most of the blueprint and making the Camera as the default pawn as you had mentioned in an earlier post. But in such a case, are you controlling your playable characters using an AI controller instead of the player controller?

bool AWGamePlayerController::GetCameraMovement(FVector& movement) const
int32 sizeX = 1, sizeY = 1;
GetViewportSize(sizeX, sizeY);
float mouseX = 0.f, mouseY = 0.f;
GetMousePosition(mouseX, mouseY);

	if(GEngine && GEngine->IsEditor())
		if(mouseX == 0 && mouseY == 0)
			return false;

	mouseX /= sizeX;
	mouseY /= sizeY;

	movement = FVector(0, 0, 0);
	if (mouseX >= 1.0f - screenBounds.X && mouseX <= 1.0f) movement.X -= 1.f;
	else if (mouseX <= 0.0f + screenBounds.X && mouseX >= 0.0f) movement.X += 1.f;

	if (mouseY >= 1.0f - screenBounds.Y && mouseY <= 1.0f) movement.Y -= 1.f;
	else if (mouseY <= 0.0f + screenBounds.Y && mouseY >= 0.0f) movement.Y += 1.f;
	return !movement.IsZero();
void AWGamePlayerController::CalcCamera(float DeltaTime, struct FMinimalViewInfo& OutResult)
	FVector movement;
	if ((bCenterCameraOnPawnPerm || bCenterCameraOnPawn) && IsGameInputAllowed())
		myCameraPosition = mPawn->GetActorLocation();
	else if (GetCameraMovement(movement))
		myCameraPosition += movement * DeltaTime * mCameraPanSpeed;

	FVector angle = myCameraRotation.Vector();
	mCameraOffset = -angle * mCameraDistance;

	OutResult.PostProcessSettings.bOverride_AntiAliasingMethod = true;
	OutResult.PostProcessSettings.AntiAliasingMethod = AAM_FXAA;
	OutResult.Rotation = myCameraRotation;
	OutResult.Location = myCameraPosition + mCameraOffset;

CalcCamera is an overridden function from APlayerController.