Unity raycast возвращает центр объекта, а не точку
Я хочу создать игру "нажми и двигай", и у меня есть агент nav-mesh с кодом, который почти работает, за исключением того, что мой персонаж всегда пытается переместиться в одно и то же место, независимо от того, где я щелкаю или положение камеры. Это моя функция,
private Vector3 GetClickPosition()
{
Vector2 screenPosition = Input.mousePosition;
Vector3 mouseWorldPosition = cam.ScreenToWorldPoint(screenPosition);
RaycastHit hitPosition;
Physics.Raycast(mouseWorldPosition, cam.transform.forward, out
hitPosition, 100, Floor);
return hitPosition.point;
}
Который используется в команде нажатия на соединение с игроком. Все ссылки, и я уверен, что проблема с этим куском кода... Заранее спасибо.
Мой источник этого кода: https://www.youtube.com/watch?v=LoKNYlWWeSM
2 ответа
Источник, на который вы ссылаетесь, работает для меня, так что, возможно, что-то немного пошло не так в вашей версии.
Попробуйте назначить соответствующий слой, который указан как Floor в вашем методе Physics.Raycast, на местности, по которой вы хотите ориентироваться. Возможно, вы упустили это, если переименовали GroundLayer, упомянутый в источнике, но не создали и не назначили соответствующий слой в редакторе. Не забудьте также установить пол, который вы используете, статичным на вкладке "Навигация -> Объект".
Я подозреваю, что ваша проблема лежит здесь:
Vector3 mouseWorldPosition = cam.ScreenToWorldPoint(screenPosition);
Physics.Raycast(mouseWorldPosition, cam.transform.forward, out hitPosition, 100, Floor);
ScreenPointToWorldPoint()
возможно, уже ведется радиопередача, чтобы найти мир, в котором находится ваша мышь (как именно Unity определяет вектор, возвращаемый этим методом, не задокументировано), снова радиопередача из этой точки в... направлении, к которому, вероятно, направлена камера.
Вместо этого попробуйте использовать cam.ScreenPointToRay()
в качестве параметра в ваш raycast.