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);
}
}

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 at 17:23

Have you tried making the Main Camera a child of your character in the hierarchy?

Remember to put in the position you want to.

Try and see if it works for you...

• This sounds like you intended to post a comment asking for clarification. Please do not use answers to post comments. – Gnemlock Sep 28 '16 at 4:25