Limit Camera distance from player

        Vector3 cursorInWorldCords = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        cursorInWorldCords.z = -10;
        Vector3 playerPos = Target.position;

        Vector3 camNextPos = new Vector3((playerPos.x + cursorInWorldCords.x) / 2, (playerPos.y + cursorInWorldCords.y) / 2, -10);

        transform.position = Vector3.SmoothDamp(transform.position, camNextPos, ref vel, damp);

So this code places the camera between the Player and MouseCursor, and its working as intended. Now I need to limit the Camera’s distance from the Player.

This for example is one ‘solution’ but when cursor moves outside of radius, it causes some wierd camera movement - jitter.

        float Dist = Vector2.Distance(new Vector2(Target.position.x, Target.position.y), new Vector2(transform.position.x, transform.position.y));
        Vector3 MouseOffset = cursorInWorldCords - transform.position;

        if (Dist > radius)
        {
            var norm = MouseOffset.normalized;
            transform.position = Vector3.SmoothDamp(transform.position, new Vector3(norm.x * radius + Target.position.x, norm.y * radius + Target.position.y, -10), ref vel, damp);
        }

Okey so I have now changed the code lil bit and I think it has removed the jitter from before, but I still think the camera is not moving totaly smooth - or maybe i’m just imagining it?

        Vector3 CursorPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        CursorPosition.z = -10;

        Vector3 dir = Target.position - CursorPosition;

        var norm = -dir.normalized;
        transform.position = Vector3.SmoothDamp(transform.position, new Vector3(norm.x * radius + Target.position.x, norm.y * radius + Target.position.y, -10), ref vel, damp);

I realize that the camera position is now not exactly between the Cursor and Player but its not casing the jitter from before so its good enough.

full code before this change

        Vector3 cursorInWorldCords = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        cursorInWorldCords.z = -10;
        Vector3 playerPos = Target.position;

        Vector3 camNextPos = new Vector3((playerPos.x + cursorInWorldCords.x) / 2, (playerPos.y + cursorInWorldCords.y) / 2, -10);

        transform.position = Vector3.SmoothDamp(transform.position, camNextPos, ref vel, damp);

        float Dist = Vector2.Distance(new Vector2(Target.position.x, Target.position.y), new Vector2(transform.position.x, transform.position.y));
        Vector3 MouseOffset = cursorInWorldCords - transform.position;

        if (Dist > radius)
        {
            var norm = MouseOffset.normalized;
            transform.position = Vector3.SmoothDamp(transform.position, new Vector3(norm.x * radius + Target.position.x, norm.y * radius + Target.position.y, -10), ref vel, damp);
        }

After change

        Vector3 CursorPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        CursorPosition.z = -10;

        Vector3 dir = Target.position - CursorPosition;

        var norm = -dir.normalized;
        transform.position = Vector3.SmoothDamp(transform.position, new Vector3(norm.x * radius + Target.position.x, norm.y * radius + Target.position.y, -10), ref vel, damp);