How to find the exact centre of the canvas/screen

The answer is entirely dependent on Canvas Render Mode and Canvas Scaler. “It’s complicated.”

Your best bet with UI is just PUT a blank object in the center of the screen and use it.

To see what I mean by “complicated”, put this script on a single UI thing under a canvas and put it dead-center.

Now go wiggle the render mode and scaling modes and watch the Debug.Log()

using UnityEngine;

[ExecuteInEditMode]
public class ReportPosition : MonoBehaviour
{
    void Update()
    {
        var pos = transform.position;
        Debug.Log( name + " at " + pos.x.ToString( "N2") + ", " + pos.y.ToString( "N2"));
    }
}

Also, I think that this might just be all you need for this problem:

Here are some notes on UI Anchoring, Scaling, CanvasScaler, etc: