Вам нужно использовать GraphicRaycaster, а не физический raycast.
https://docs.unity3d.com/2019.1/Documentation/ScriptReference/UI.GraphicRaycaster.Raycast.html
Это немного отличается от физики raycast в том смысле, что вы должны использовать некоторые промежуточные классы (ie. PointerEventData
), и он возвращает список попаданий, а не только один.
Кроме того, он, похоже, не указан в документах 2019.3. Ссылка выше для документов 2019.1. Я не удивлюсь тому, что в ближайшем будущем он станет устаревшим.
Выдержка из вышеуказанных документов:
//Set up the new Pointer Event
m_PointerEventData = new PointerEventData(m_EventSystem);
//Set the Pointer Event Position to that of the mouse position
m_PointerEventData.position = Input.mousePosition;
//Create a list of Raycast Results
List<RaycastResult> results = new List<RaycastResult>();
//Raycast using the Graphics Raycaster and mouse click position
m_Raycaster.Raycast(m_PointerEventData, 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 " + result.gameObject.name);
}