#c# #unity3d
#c# #unity-игровой движок
Вопрос:
В моем проекте у меня есть вид карты сверху вниз, созданный с использованием карты высот и цветовой кодировки. Я хочу, чтобы пользователи могли размещать лодки на карте, щелкая, куда они хотят, чтобы они плыли, но только если они нажимают на воду. Есть какой-нибудь способ добиться этого? Не уверен, что я хорошо объяснил себя, поэтому спрашивайте, и я постараюсь уточнить.
РЕДАКТИРОВАТЬ: Основываясь на приведенном ниже ответе Совиута, кажется, что лучший способ сделать то, что я хочу сделать, — это направить луч и проверить расстояние, и сравнить это, чтобы выяснить, попадает ли он в воду или на сушу. До сих пор я делал это на основе примера, который я нашел здесь:
RaycastHit hit;
Ray downRay = new Ray(Vector3.down, Input.mousePosition);
Physics.Raycast(downRay, out hit);
Debug.Log(hit.distance);
Это возвращает расстояние, но значения, похоже, неверны. Это как-то связано с тем, как я помещаю числа в new Ray (…)?
Комментарии:
1. Пожалуйста, дополните свой ответ вашей попыткой. StackOverflow — это не сервис для написания кода, нам нужно увидеть ваш код, чтобы помочь вам его исправить.
Ответ №1:
Поскольку вы не привели ни одного примера того, что вы пробовали, этот ответ будет касаться только общего подхода.
Вы бы не искали цвет пикселя при наведении курсора мыши, вы бы выбирали либо высоту карты высот, либо цвет в координате UV на поверхности. Вы могли бы получить эту координату, поместив луч в пространство экрана, преобразовав его в мировое пространство для обнаружения столкновения, преобразовав положение столкновения в UV-координаты и затем сославшись на карту высот или цветовую карту для значения в этой UV-координате. Если высота достаточно низкая, чтобы считаться водой, или цвет воды, поместите лодку.
Комментарии:
1. Я добавил более подробную информацию о том, что я сейчас делаю, основываясь на вашем предложении