detect click on canvas

I’m trying to add a HUD in my project and I want that when I click on the canvas ( which is 20% of the screen ) my player dont move.
It’s moving by a raycast statement, so I tryied this but it doesnt work :

        if (Physics.Raycast(ray, out hit) ) {
            if(hit.transform.gameObject.layer == 5)
                print("Ui element was click");

There’s a fairly detailed example in the docs to do just this. I’ll clean their example up a bit for you, but the modifications for your exact situation are straightforward.

As mentioned on that page, this will be attached to your Canvas object so that it can access its GraphicRaycaster component.

using System.Collections.Generic;

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class CheckClicks : MonoBehaviour
    // Normal raycasts do not work on UI elements, they require a special kind
    GraphicRaycaster raycaster;

    void Awake()
        // Get both of the components we need to do this
        this.raycaster = GetComponent<GraphicRaycaster>();

    void Update()
        //Check if the left Mouse button is clicked
        if (Input.GetKeyDown(KeyCode.Mouse0))
            //Set up the new Pointer Event
            PointerEventData pointerData = new PointerEventData(EventSystem.current);
            List<RaycastResult> results = new List<RaycastResult>();

            //Raycast using the Graphics Raycaster and mouse click position
            pointerData.position = Input.mousePosition;
            this.raycaster.Raycast(pointerData, results);

            //For every result returned, output the name of the GameObject on the Canvas hit by the Ray
            foreach (RaycastResult result in results)
                Debug.Log("Hit " +;