# Turning the camera when the player turns

I have a 3rd person view of the player character, and I wish my camera to follow the player both when he moves and when he rotates.

So far I have the movement correct:

    public class CameraController : MonoBehaviour {

public GameObject player;
private Vector3 offset;
// Use this for initialization
void Start()
{
offset = transform.position - player.transform.position;
}

// Update is called once per frame
void LateUpdate()
{
transform.position = player.transform.position + offset;
}
}


However the rotation of the camera does not change when the player looks in either direction. How can this be done?

Unity had it's own smooth follow script in previous versions. It looks something like this-

using UnityEngine;
using System.Collections;

public class SmoothFollow : MonoBehaviour {

// The target we are following
public Transform target;
// The distance in the x-z plane to the target
//So this would be your offset
public float distance = 10.0f;
// the height we want the camera to be above the target
public float height = 5.0f;
// How much we
public float heightDamping = 2.0f;
public float rotationDamping = 3.0f;

// Place the script in the Camera-Control group in the component menu

void LateUpdate () {
// Early out if we don't have a target
if (!target) return;

// Calculate the current rotation angles
float wantedRotationAngle = target.eulerAngles.y;
float wantedHeight = target.position.y + height;

float currentRotationAngle = transform.eulerAngles.y;
float currentHeight = transform.position.y;

// Damp the rotation around the y-axis
currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);

// Damp the height
currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime);

// Convert the angle into a rotation
var currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);

// Set the position of the camera on the x-z plane to:
// distance meters behind the target
transform.position = target.position;
transform.position -= currentRotation * Vector3.forward * distance;

// Set the height of the camera
transform.position = new Vector3(transform.position.x,currentHeight,transform.position.z);

// Always look at the target
transform.LookAt(target);
}
}

• Old but still working in 2020. Thanks for all old threads. LoL – Shad Aug 18 at 13:13

Shraa1's answer will work, but if you want something simple to add to your code, you can just use LookAt.

transform.LookAt(player.transform);


This keeps the camera pointed at the player.

• What if you want the camera looking at where the player is looking? – trainoasis Jul 8 '19 at 17:23