need help: camera movement

Hi there Unity community!
so, 2 weeks ago i started to learn programming to work with unity, and now im trying to (re)make a game myself. I am trying to remake one of my favourite games, “sonic chronicles”, a third person sonic rpg for the ds (since it wont get a sequel or remake). i got pretty far with the overworld movement, but now im stuck with the camera.

in sonic chronicles, the camera usually follows the player (sonic, amy, etc…), and the more far away the touchpen is away from the player, the faster they move. At a specific point, they wont move faster, and there the camera begins to move a little bit faster than the player, but only in a specific radius. as long as you move the fastest, the camera will move to the end of the radius thats on the way to the touchpen. and this is what couldnt do (i tried for like 4 hours, and nothing worked). i only got it working at some point, but the camera will then stay on the end of the radius, and wont go through the mid. it would be very nice if somebody helped me.
my script looks like this at the moment:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

[System.Serializable]
public class Information                //a seperate class so i have everything sorted and can still look at the numbers
{
    public Vector2 MP;                  //MousePosition
    public Vector2 PP;                  //PlayerPosition
    public Vector2 moveXY;              //coordinates for the mousTarget
    public Vector3 mouseTarget;         //the point where the player looks at (and runs to)

    public float speedRadius;           //the distance from the player to where the maximum ist reached
    public float screenHeight;          //screenHeight
    public float speed;                 //Player movement speed
    public float playerCursorDistance;  //the distance from the player on the screen to the mouse on the screen
    public float distanceSpeed;         //speed per distance (if the mouse is further away from the player, the player moves faster)
    public Quaternion targetRotation;   //the direction in that the player is looking

}


public class PlayerController : MonoBehaviour
{
    Camera cam;                         //the camera
    public GameObject cameraObject;     //to get the camera
    public Transform cameraTarget;     //to get the position of the point where the camera should look at (this is part of my question)
    public float distanceCameratargetToPlayer; //the distance between the camera and the player (also part of my question)
    public Transform target;            //the playerposition
    public float insideCameraRadius;   //the radius the camera should move in (part of the question)

    public Information info;            //to acces the Information class
    public float maxSpeed;              //the maximum speed the player can run (currently its "10f")
    public float gravity;               //this is to drag the player down on the ground so he wont be in the air when he down slopes



    private void Start()
    {
        cam = cameraObject.GetComponent<Camera>();      //getting the camera
        info.screenHeight = Screen.height;              //to get the screen height into a float
        info.speedRadius = Mathf.RoundToInt(0.5f * 0.90f * info.screenHeight); /*to determine the position where the maximum speed is reached
                                                                               (so when the cursor has left the radius of 90% down to the bottom (and top) of the screen, the speed wont go any higher than maxSpeed)  */
        info.speed = (maxSpeed / info.speedRadius);     // to determine the speed value (in my case, it is about 0.052
    }                                                   //i made it this complicated so that this script works for every screen, so it wont be needed to be adjusted

    private void Update()
    {
        info.MP = new Vector2(Input.mousePosition.x, Input.mousePosition.y); //determining the mouse position on the screen
        info.PP = new Vector2(                                               //determining the player position on the screen
            Mathf.RoundToInt(cam.WorldToScreenPoint(target.position).x),
            Mathf.RoundToInt(cam.WorldToScreenPoint(target.position).y)
            );
        distanceCameratargetToPlayer = Vector3.Distance(cameraTarget.position, target.position); //to get the distance between these to points (part of question)
        if (distanceCameratargetToPlayer > 1)
        {
            insideCameraRadius = 1;
        }
        else
        {
            insideCameraRadius = 0;
        }
    }

    private void FixedUpdate()
    {
        info.playerCursorDistance = Vector2.Distance(info.PP, info.MP);              //the distance between the cursor and the Player
        info.moveXY = new Vector2(info.MP.x - info.PP.x, info.MP.y - info.PP.y);     //to determine the coordinates for the mousTarget
        Vector3 movement = new Vector3(info.moveXY.x, 0.0f, info.moveXY.y);          //to bring the moveXY into a vector3
        info.mouseTarget = new Vector3(target.position.x + movement.x, 0.0f, target.position.z + movement.z); //where the player looks at(and runs to)
        info.targetRotation = Quaternion.LookRotation(info.mouseTarget, Vector3.up); //i copied this line, its basically the rotation the player has to be in order to move towards the cursor

        if (info.playerCursorDistance > info.speedRadius)                            //if the distance from the player to the cursor is bigger than the radius,...
        {
            info.distanceSpeed = maxSpeed;                                           //... the player should move at maxSpeed
        }
        else if (info.playerCursorDistance < info.speedRadius)                       //but if the cursor is inside the radius,...
        {
            info.distanceSpeed = info.speed * info.playerCursorDistance;             //... the player should move at a speed relative to the distance to the cursor
        }

        if (Input.GetMouseButton(0))                                                  //so, if the mousebutton gets pressed,
        {
            transform.rotation = Quaternion.Slerp(transform.rotation, info.targetRotation, 1f); //the plyer first turns to the cursor,
            transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * info.distanceSpeed); //and then moves towards it
            transform.position += transform.TransformDirection(Vector3.down * Time.deltaTime * gravity);               //and this is to drag it down so the player wont fly down slopes when moving to fast

            cameraTarget.transform.position = transform.position; //current position of point the camera looks at and follows
        }
    }

    private void LateUpdate()               //i dont know if lateupdate is correct, but since the camera should move after the positions are determined, i used lateupdate
    {
        if (Input.GetMouseButton(0))
        {
            if (info.distanceSpeed == maxSpeed)
            {
                if (insideCameraRadius == 1) /*so, basically the camera should move when i press the left mousebutton,
                                             when the playerspeed is at its maximum and when when the camera will still move in the radius
                                             (it shouldnt get out of there, and i dont know if it will work this way, and thats where i am stuck)*/
                {
                    //this is when the camera should move (faster than the player) in its radius, and only if the conditions are true
                }
            }
        }
    }
}

edit: the cameraTarget.y should be the same as transform.position.y
I already made some variables, like
29: distanceCameratargetToPlayer
55: distanceCameratargetToPlayer = Vector3.distance(…)
93: the hole lateupdated

this is how the camera should be moving:

it would be very nice if somebody could help me!
-Justin113D

ok, i got it working on my own, i just made this for the camera:

    public GameObject cameraObject;    
    public Transform cameraTarget;    
    public Transform target;           
    public Vector3 offset;
    public float radius;

void start()
{
        offset = transform.position - cameraTarget.position;
}

void fixedupdate()
{
   if (Input.GetMouseButton(0))
  {
            if (info.distanceSpeed == maxSpeed)
            {
                Vector3 secMovement = transform.TransformDirection(Vector3.forward * Time.deltaTime * info.distanceSpeed * 1.5f);
                Vector3 newPos = cameraTarget.position + secMovement;
                offset = newPos - target.position;
                cameraTarget.position = target.position + Vector3.ClampMagnitude(offset, radius);
            }
            else cameraTarget.position = target.position + Vector3.ClampMagnitude(offset, radius);
    }
}

i added this part of code into my code, and now it works perfectly fine, like I wanted! took 2 hours to find that out tho…