Pull to refresh

NavMesh на костылях — маленькие хитрости

Reading time 1 min
Views 10K
Продолжаю играться в Unity3d.
В этой заметке постараюсь рассказать как при помощи грязного костыля можно обойти статичность компонента NavMesh.

Для обработки перемещения персонажей и игрока, в том числе, движок предлагает универсальный и довольно мощный инструмент — NavMesh. Фактически, это двумерная фигура — сетка, которая натягивается на террейн и позволяет обрабатывать перемещения агента NavMeshAgent.

image

Однако есть небольшая проблема. По большому счету, NavMesh статичен и обсчитывается при разработке в редакторе.
Представим такую ситуацию: у нас есть корабль, плавно покачивающийся на волнах и его бравый капитан, бесцельно слоняющийся по палубе.

image

Проблема заключается в том, что NavMesh на модель корабля в лоб натянуть мы не можем. Модель — динамическая, меш — статичен.

Я нашел следующий выход:
— отключаем коллайдер корабля (компонент, отвечающий за физику модели)
— создаем несколько боксов, имитирующих палубу
— генерируем NavMesh для этих боксов
— отключаем компоненты, отвечающие за рендер боксов, т.е. делаем их невидимыми

Вуаля — капитан лихо шлепает по NavMesh'у, натянутому на невидимые боксы. При небольших градусах раскачки корабля не сильно заметно, что он немного «проваливается» под палубу.

Область применения костыля достаточно широкая. Можно, например строить Mesh для птиц/драконов, имитировать левитацию, строить невидимые мосты и.т.д.

Есть, конечно, дополнительные инструменты — NavMeshObstacles, т.е. динамические препятствия, но и с ними проблем хватает.

Если у кого-то есть идеи, как сделать лучше, пожалуйста, поделитесь опытом.
Tags:
Hubs:
-3
Comments 13
Comments Comments 13

Articles