# Context

So I'm making a clone of _Crossy Roads_ where the camera follows the player. It does some linear interpolation (Lerp) after moving, and the camera starts moving away from the player in the positive direction (x-axis until camera reaches to a certain range where player is not visible enough). Things I have tried is by flagging it, but I think I'm doing it wrong.

# Problem

I have done my camera movements accordingly, but I am having an issue where the conditions are not properly met. I'm get the offset camera after not moving, but it does not the Lerp, and vice-versa. I want both to happen after a certain condition after the game starts. When the player moves, the camera follows it in Lerp. However, once the player is "Idle", its still Lerping. I want the camera to continue by itself and at the same time focus at the player's object.

# Example

## Camera with Lerp, but not moving away from the player

[![Camera Lerps after moving, but it doesn't move away from the player][1]][1]

## Camera moving away, but not following player with lerp

[![enter image description here][2]][2]

# Code 

## `CameraController.cs`

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 /*
 ** Camera following player (Smoothing and angle): https://youtu.be/4HpC--2iowE
 ** Maximo: https://www.youtube.com/watch?v=bXNFxQpp2qk&ab_channel=iHeartGameDev
 ** Moving character relative to camera: https://forum.unity.com/threads/moving-character-relative-to-camera.383086/
 ** Camera follow v2: https://youtu.be/Jpqt2gRHXtc?list=PLq_nO-RwB516fNlRBce0GbtJSfysAjOgU
 */
 
 public class CameraController : MonoBehaviour
 {
 public GameObject player;
 public PlayerControl playerControlScript;
 private Vector3 newCameraPos;
 public bool stillIdle;

 
 void Start()
 {
 stillIdle = false; 
 PlayerControl playerControlScript = GetComponent<PlayerControl>();
 }
 
 void LateUpdate()
 {
 player = GameObject.FindGameObjectWithTag("Player");
 if (playerControlScript.GetfirstInput()) //True
 {
 stillIdle = true;
 newCameraPos = Vector3.Lerp(transform.position, playerControlScript.transform.position, Time.deltaTime);
 transform.position = new Vector3(newCameraPos.x, 1, newCameraPos.z);
 }
 if (stillIdle)
 transform.position = new Vector3(transform.position.x + 0.69f * Time.deltaTime, transform.position.y, transform.position.z); //Moving camera away effect
 }
 }

## `PlayerControl.cs`

 public class PlayerControl : MonoBehaviour
 {
 bool firstInput;
 Vector3 startPos;
 Vector3 endPos;
 public bool GetfirstInput() //I was learning how to have a Get function while my member was private from another script file
 {
 return firstInput;
 }
 void Update()
 {
 if (Input.GetButtonDown("up") || Input.GetButtonDown("left") || Input.GetButtonDown("right") || Input.GetButtonDown("down"))
 {
 //if game starts
 {
 //Other variables being initialized here
 firstInput = true;
 }
 }
 
 }
 }

# Hierarchy/Inspector

## Main Camera

[![enter image description here][3]][3]

## Player Object

[![enter image description here][4]][4]

Some help would be appreciate it. I feel I have been staring at this problem and I bet it is something minimal and small from just thinking it.

Let me know if you need clarifications. I'm happy to edit and answer them for everyone


 [1]: https://i.sstatic.net/mwmZb.gif
 [2]: https://i.sstatic.net/DwAz0.gif
 [3]: https://i.sstatic.net/GTGfO.jpg
 [4]: https://i.sstatic.net/KC00W.jpg