У меня есть проект, в котором пользователь управляет камерой, как вы можете управлять камерой в редакторе сцены в Unity. Я использую raycast, чтобы камера не проходила сквозь стены, пол и потолок. Это работает следующим образом: я отправляю raycast в определенном диапазоне, и если попадания нет, преобразование будет происходить нормально, но не произойдет, если обнаружено попадание. Я использую этот метод для панорамирования влево и вправо, и он отлично работает, чтобы не дать игроку пройти сквозь стены. Я также использую тот же метод для масштабирования колеса мыши, и он также отлично работает. Проблема возникает, когда я использую этот метод для предотвращения прохода пользователя через потолок или пол, когда пользователь использует вертикальное перемещение. Иногда пользователь застревает на потолке или полу, и я не знаю почему. Я пробовал кучу разных вещей, чтобы исправить эту проблему, но безуспешно. Если у кого-то есть идеи, почему это происходит, и возможную работу, я был бы признателен. Вот мой код для вертикального перевода с Raycasting.
//if the user moves the camera veritcally
if (verticalTranslation.isActivated())
{
float translateY = Input.GetAxis(mouseVerticalAxisName) * verticalTranslation.sensitivity;
RaycastHit hit;
//sends raycast up veritcally
if (translateY > 0)
{
//if raycast hit detected do nothing, else transform position
if (Physics.Raycast(transform.position, Vector3.up, out hit, maxDistance))
{
Debug.LogWarning("stop movement");
Debug.LogWarning(hit.distance);
}
else
{
transform.Translate(0, translateY, 0);
}
}
//sends raycast down veritcally
if (translateY < 0)
{
if (Physics.Raycast(transform.position, -Vector3.up, out hit, maxDistance))
{
Debug.LogWarning("stop movement");
Debug.LogWarning(hit.distance);
}
else
{
transform.Translate(0, translateY, 0);
}
}
}