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.

Другие вопросы по тегам