Я заметил проблему в наземной проверке контроллера Unity от третьего лица.
Наземная проверка должна определить, стоит ли игрок на земле. Это делается путем отправки луча под игроком.
Однако, если игрок стоит сверху и в середине двух ящиков, и между этими ящиками есть промежуток, то луч попадает в промежуток, и игрок думает, что он не касается земли, что выглядит следующим образом:
Я не могу двигаться. Вы можете ясно видеть, что луч находится в промежутке, и, таким образом, дерево смешивания игрока аниматора игрока активно.
Как лучше всего решить эту проблему?
Я думал о съемке нескольких лучей одного происхождения, но с разных точек зрения. И OnGround
должно быть правдой только в том случае, если Х% этих лучей попадет на «землю». Или есть лучший способ?
источник
Debug.DrawLine
? Это трудно визуализировать, я не могу написать сценарий.Честно говоря, я считаю, что подход с несколькими лучами - неплохая идея. Я бы не стал снимать их под углом, вместо этого я бы сместил лучи, что-то вроде этого:
Игрок - синий человечек; Зеленые стрелки представляют дополнительные лучи, а оранжевые точки (RaycastHits) - это точки, где два луча попадают в боксы.
В идеале два зеленых луча должны быть расположены прямо под ногами игрока, чтобы максимально точно проверить, заземлен ли игрок или нет;)
источник
Я думаю , что я решил ее изменения ,
Physics.Raycast
чтобыPhysics.SphereCast
в сценарииThirdPersonCharacter.cs
. Но это все еще нуждается в тестировании.Я также должен был закомментировать эту строку, которая меняла
m_GroundCheckDistance
значение, в противном случае было бы странное скольжение в некоторых моделях:И я изменился
m_GroundCheckDistance = 0.1f;
наm_GroundCheckDistance = m_OrigGroundCheckDistance;
:Весь сценарий:
источник
Почему бы не использовать функцию OnCollisionStay Unity ?
Плюсы:
Вам не нужно создавать raycast.
Это точнее, чем raycast: Raycast - это метод «стрельбы для проверки», если ваша съемка с использованием радиопередачи недостаточно освещена, это приводит к ошибке, из-за которой вы задали этот вопрос.
OnCollisionStay
Метод буквально проверяет, соприкасается ли что-то - он идеально подходит для проверки того, касается ли игрок земли (или чего-либо, на что игрок может приземлиться).Для кода и демонстрации, проверьте этот ответ: http://answers.unity.com/answers/1547919/view.html
источник