Отвечая на вопрос в заголовке - кинуть рейкаст из точки клика и смотреть куда он попал.
Но вот я вообще не могу понять, что мешает использовать OnClick с условием
фактически мне нужно чтоб нажатие по UI кнопке было эквивалентно нажатию клавиши на клавиатуре.
У вас есть обработчики - клавиатуры, UI-я, и они дергают одну и ту же функцию.