EvgeniyT писал(а):Я могу найти позицию мыши в 2-мерной плоскости окна, но как мне это спроецировать в 3d и понять, где именно я нажал?
Используй метод камеры ScreenPointToRay, который отдаст тебе луч, который уже нужно будет использовать для обратной трассировки в Physics.Raycast. Это даст тебе коллайдер (а следовательно, и сам объект), на который направлен луч из камеры, проходящий через заданные экранные координаты, а также точку столкновения луча и объекта, нормаль и ещё много другой полезной информации. Соответственно, на каждом проверяемом объекте должен быть установлен коллайдер, в противном случае удовлетворительного результата ты не получишь.
В ScreenPointToRay нельзя отдавать обычные координаты мыши, так как они находятся не в экранном пространстве. Чтобы перевести их в экранное, нужно пересчитать ординату относительно окна (другие координаты не нужно), вот хоть бы и так:
новаяОрдинатаКрысы = Mathf.Abs(Input.mousePosition.y - Камера.pixelHeight)
Zaicheg писал(а):Метод Camera.ScreenToWorldPoint с параметром Input.mousePosition (возможно, надо инвертировать Y-координату) даст вам RaycastHit, содержащий точку попадания в террейн.
Ну, не даст. ScreenToWorldPoint возвращает точку, из неё и позиции камеры нужно будет построить луч и затем трассировать. По сравнению с использованием ScreenPointToRay дополнительный шаг получается. Кроме того, метод ScreenToWorldPoint работает по-особенному — аппликату точки, которую он получает на входе, необходимо задавать самостоятельно. А она неизвестна. Таким образом использовать этот метод для указанных целей имеет смысл только тогда, когда аппликата не имеет значения (двумерная графика), или она известна заранее. Но в любом случае для камеры с перспективной проекцией z-координата точки, передаваемой в метод, должна быть отличной от нуля (для ортографической камеры это не обязательно), иначе результат, возвращаемый методом, будет некорректным и его нельзя будет использовать.