Недавно я завершил 2-й проект моего курса GamedevHQ, The Great Fleece. Я хотел бы немного рассказать о его развитии.

Система Guard AI Waypoint-Patrol:

Читайте Часть 1 и 2 здесь.

В этом проекте мне нужно было, чтобы охранники могли ходить туда-сюда по заданному маршруту, который включал n-количество промежуточных точек, в которых охранник останавливался. Распространенным решением для такого рода требований является система путевых точек, к которой охранники могут найти путь, которую я решил создать.

Система просто использует список позиций в мире и компонент Unity Navigation NavMeshAgent, чтобы позволить охраннику (или любому объекту) найти путь к каждая точка. Используя переменные таймеры и параметры, я могу выбрать, как работает поведение патруля.

Для некоторых охранников мне также нужна была возможность случайным образом ходить к одной из двух путевых точек, чтобы разнообразить их патрули. Для этого я присвоил каждой путевой точке необязательную «альтернативную» точку.

Для простоты разработки я заставил компонент патруля рисовать линии между каждой точкой. Зеленый между безальтернативными точками, синий, когда одна или несколько точек имеют активную альтернативу. Наконец, красные линии с точкой на конце — это направление, в котором охранник повернется в этой точке, а красные линии над синими — это зона, в которой охранник начнет поворачиваться до достижения точки (для плавности).

Движение игрока/навигация:

Подробнее здесь.

Код навигации/движения игрока довольно прост. Он просто использует raycast от камеры до точки, где щелкнул мышь (если там есть допустимый слой), чтобы определить пункт назначения. Затем он использует NavMesh.SamplePosition, чтобы найти ближайшую действительную точку NavMesh рядом с щелчком мыши (это гарантирует, что игрок не упрется в стены или не отобразит Затем он использует Unity систему навигации, как и охранники, для поиска пути к этой точке.

Используя путь NavMeshAgent во время ходьбы и LineRenderer, я создаю точную линию, показывающую путь, по которому игрок пойдет к месту назначения. Я также включаю маленькую 2D-плоскость с маркером PNG и устанавливаю ее положение в месте назначения.