2d camera follow player by looking ahead.

I have created smooth camera follow script which tracks player in the x axis. Now i’m trying to figure out how to make the camera look ahead of the player.

This is what i got so far:

using UnityEngine;
using System.Collections;

public class CameraFollow : MonoBehaviour {

	public Transform player;
	public float smoothTime = 0.3f;
	private Vector3 velocity = Vector3.zero;

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		Vector3 targetPosition = player.transform.position;
		targetPosition.z = transform.position.z;
		targetPosition.y = 0f;

		transform.position = Vector3.SmoothDamp (transform.position, targetPosition, ref velocity, smoothTime);

	}
}

Any ideas?

This is what I’m currently using. It could use some tweaking yet but should get you started if you haven’t already found a solution:

 public class MyCameraFollow : MonoBehaviour
    {
    
        [SerializeField]
        private float xMax;
    
        [SerializeField]
        private float yMax;
    
        [SerializeField]
        private float xMin;
    
        [SerializeField]
        private float yMin;
    
        //Set the amount of horizontal offset in the inspector
        public Vector2 offset;
    
        //Allow us to click and drag an object (that we want to follow) in the inspector
        private Transform target;
        private Vector3 tempFollowedObjectWithOffset;
    
        //Lerp
        public bool lerpCameraMovementOnX;
        public float lerpSpeed;
    
    
        void FixedUpdate()
        {
    
            if (Player.Instance.IsDead == false)
            {
                target = GameObject.Find("Player").transform;
    
                if (Player.Instance.facingLeft == true)
                {
                    tempFollowedObjectWithOffset = new Vector3(Mathf.Clamp(target.position.x + offset.x, xMin, xMax), Mathf.Clamp(target.position.y + offset.y, yMin, yMax), transform.position.z);
                }
                else
                {
                    tempFollowedObjectWithOffset = new Vector3(Mathf.Clamp(target.position.x - offset.x, xMin, xMax), Mathf.Clamp(target.position.y + offset.y, yMin, yMax), transform.position.z);
                }
    
                if (lerpCameraMovementOnX)
                {
                    transform.position = Vector3.Lerp(transform.position, tempFollowedObjectWithOffset, lerpSpeed * Time.deltaTime);
                }
                else
                {
                    transform.position = tempFollowedObjectWithOffset;
                }
            }
            if (Player.Instance.IsDead == true)
            {
                target = null;
                return;
            }
        }
        }