Quick answer: Some UI element has Raycast Target = true and is absorbing the click. Uncheck Raycast Target on decorative images, or add a CanvasGroup with Blocks Raycasts = false. Use EventSystem.current.IsPointerOverGameObject() to decide whether world clicks should proceed.

Here is how to fix Unity UI raycaster blocking clicks elsewhere. You add a HUD. Now clicking the game world does nothing over the HUD area. The HUD has no buttons there — just a decorative frame graphic — but clicks are still swallowed. Or you added a full-screen background image behind your menu, and even clicking outside the menu does not reach the world. Unity’s UI raycast system catches every click it can, and getting it to ignore some clicks takes explicit configuration.

The Symptom

Clicks that should reach the world (3D raycasts, 2D physics, or world-space triggers) are intercepted by UI elements. Symptoms:

What Causes This

Raycast Target default on. Every Image component has a Raycast Target checkbox, default on. An invisible or decorative image still blocks raycasts. A full-screen frame image covers the entire screen and absorbs everything.

Text and TMP Raycast Target. Text and TextMeshPro UGUI components also have Raycast Target. Large text blocks sitting in the corner of the screen can unexpectedly block clicks where their rect extends.

Transparent panels. A Panel with low alpha still raycasts by default. Players cannot see the panel but the raycaster sees it fully.

Missing IsPointerOverGameObject check. Your world-click code fires on mouse-down regardless of UI state. Both UI and world react to the same click.

GraphicRaycaster on overlapping canvases. Multiple canvases with GraphicRaycaster at different Z positions can race for the same click. Order determined by Sort Order, camera depth, or Render Mode.

The Fix

Step 1: Disable Raycast Target on decorative graphics. Select each Image/Text/TMP component that should not receive clicks. In the Inspector, uncheck Raycast Target.

A good rule of thumb: only Images/Texts that have a pointer-event handler attached (Button, EventTrigger, custom IPointerClickHandler) should have Raycast Target enabled. Everything else — backgrounds, frames, icons, labels — should not.

For large UIs, a script to bulk-disable:

#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

public static class DisableRaycastTargets
{
    [MenuItem("Tools/UI/Disable Raycast on Decorative")]
    static void Run()
    {
        foreach (var g in Object.FindObjectsOfType<Graphic>())
        {
            if (g.GetComponent<Button>() == null &&
                g.GetComponent<Toggle>() == null &&
                g.GetComponent<EventTrigger>() == null)
            {
                g.raycastTarget = false;
            }
        }
    }
}
#endif

Run once on existing scenes; keep Raycast Target off by default in new UI work.

Step 2: Use CanvasGroup for overlays. For a whole panel that should not block input:

// Add CanvasGroup component to the panel
CanvasGroup cg = panel.GetComponent<CanvasGroup>();
cg.blocksRaycasts = false;
cg.interactable = false;
// Panel still renders but does not intercept clicks

Common use: a heads-up display that shows stats, icons, and text but should never block game input. Add CanvasGroup to the HUD root with Blocks Raycasts = false.

Step 3: Add IsPointerOverGameObject check. In your world-click handler:

using UnityEngine;
using UnityEngine.EventSystems;

public class WorldClick : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            // Skip if UI ate the click
            if (EventSystem.current.IsPointerOverGameObject())
                return;

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out RaycastHit hit))
            {
                // handle world click
            }
        }
    }
}

For touch: EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId) — always pass the finger ID on mobile.

Step 4: Configure Canvas order. If multiple Canvases are visible, their raycast order matters. Select each Canvas:

For a pause menu that should absorb all clicks, set its Canvas Sort Order higher than the HUD canvas. The modal naturally takes priority.

Event Trigger Quirks

EventTrigger components handle individual pointer events. If you add EventTrigger for a hover effect but forget that it also enables Raycast Target, you accidentally block clicks. Only use EventTrigger when necessary; otherwise, use dedicated interactive components (Button, Toggle) which are explicit about their input consumption.

New Input System

Unity’s new Input System has its own UI integration. If using InputSystemUIInputModule, the raycast blocking behavior is similar but accessed differently. Use EventSystem.current.IsPointerOverGameObject() the same way — it works with either input system.

“Raycast Target is on by default. Turn it off by default. Your world input returns instantly.”

Related Issues

For UI button input issues, see UI Button Not Responding. For new input system issues, New Input System UI Not Working covers related UI setup.

Raycast Target off unless needed. CanvasGroup blocksRaycasts false for HUDs. IsPointerOverGameObject guard for world clicks.