Водитель ИИ в гоночной игре

17

Мне любопытно, как я могу управлять машинами в гоночной игре.

Должен ли мой агент ИИ управлять своим автомобилем с помощью таких команд, как «газ на 0,35, рулевое колесо на 0,5 вправо, тормоз на 0,0»? Или мне лучше предварительно рассчитать кривую, к которой придерживается автомобиль, а визуальные элементы, такие как поворот передних колес, просто для того, чтобы все выглядело согласованно? Или есть другой способ?

dargemir
источник
4
Стратегия «придерживаться идеальной кривой» работает только при условии отсутствия помех. В тот момент, когда агенты ИИ начнут взаимодействовать с другими автомобилями (уворачиваясь от них или протаранив их), им придется импровизировать.
Филипп
1
Да, что-то вроде узлов вдоль трассы с рулевым управлением типа boids.
MichaelHouse
1
Вот статья об ИИ в ралли Колина МакРея 2.
gre_gor
@gre_gor, это очень полезная статья, спасибо!
Даргемир

Ответы:

16

Можно сказать, что на каком-то уровне игра идет по заранее рассчитанному пути. Так как трассы гоночной игры в любом случае (как правило) предварительно рассчитаны.

Даже если мы говорим о генерации треков случайным образом, игра должна была вычислить текущую часть треков на момент, когда машина туда доберется.

Ну, это было легко. Что-нибудь еще об этом?

Оба, следуя заранее рассчитанному пути и систематически управляя автомобилем, находят применение в игровой индустрии. Ответ должен использовать оба типа.

Прежде всего, я хочу отметить, что «вычисление кривой» может означать две вещи:

  • Создание функций, которые будут выводить позицию на кривой, имея в качестве параметра, насколько далеко вы хотите выполнить запрос.

  • Создание пути, понимаемого как список точек (или инструкций и другой управляющей информации), которым нужно следовать.

Первый может быть полезен для предсказания или в некоторых физических симуляциях. Тем не менее, когда мы говорим об управлении объектом, последний является рекомендуемым подходом.

Примечание: для более старых игр (1980-х годов) другие машины больше похожи на движущиеся препятствия. Они были там для вас, чтобы избежать их и превзойти их. Мы не говорим о них.


  • Следующий предварительно вычисленный путь: Это полезно для кинематографических или повторяемых сцен. Например, в GTA San Andreas преследование преследует цель преследования, и все машины следуют по заранее определенному пути (это гарантирует, что цель преследования может избежать движения traffic). Тем не менее, как только вы возмущаете их, они возвращаются к контролю ИИ, в этом случае ИИ должен будет найти путь, чтобы добраться туда, куда он должен идти своим обычным путем.

    ※: На самом деле, это было записано заранее. Запись и воспроизведение были одной из новых функций игрового движка GTA SA.

  • Контролируется AI:

    ИИ в простейшем виде - это конечный автомат. Он проверяет, в каком он состоянии, и выполняет некоторые действия в зависимости от этого. Я буду ссылаться на эти комбинации состояния и действия как на поведение. Действия не должны соответствовать геймпаду игрока. Ни один не делает поведения.

    Для простой игры вам, вероятно, понадобятся только два заметных поведения: 1) если он находится на трассе, то следуйте по трассе, избегая других машин и любых препятствий, и 2) если она не на трассе, возвращайтесь на дорожки.

    На данном этапе это не далеко от следования пути (треки). Тем не менее, поскольку трассы на самом деле не являются линией, мы не говорим о том, чтобы следовать по пути, а о том, чтобы оставаться рядом с ним (избегая при этом других машин и любых препятствий). Это означает, что AI должен решать «рулевое управление, торможение и ускорение».

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

    Я также хочу упомянуть, что современные игры могут иметь более сложное поведение, например, ИИ может выбрать другой автомобиль или заблокировать их путь. На самом деле, ИИ может даже выбрать, какой из них применить, основываясь на некоторой форме машинного обучения, но я отвлекся.

    Наконец, учтите, что может быть полезно иметь более простое управление машинами ИИ вне поля зрения игрока. Либо для производительности, либо для Rubber Banding (который в этом случае держит машины ИИ рядом с игроком, чтобы сделать гонку интересной, это можно рассматривать как мошенничество ИИ, когда вы не можете оставить позади любого противника).


Что касается анимации, обычно не очень хорошая идея симулировать физику колес самостоятельно. Если вы сделаете это, это может добавить реалистичности в игру, но будет стоить производительности. Обычно игра будет анимировать колеса на основе поведения, а не выражать поведение с точки зрения движения колес и имитировать последствия.

Конечно, вам может потребоваться уделить дополнительное внимание тому, что колеса находятся в контакте с землей. И возможно оживление подвески.

Theraot
источник
Это просто замечательный ответ, большое спасибо.
Даргемир,
0

Я настоятельно рекомендую отделить модель физики / состояния автомобиля от контроллера автомобиля и сделать агент ИИ и контроллер игрока двумя сменными контроллерами с командами высокого уровня, подобными тем, которые вы предложили в своем вопросе.

Это имеет ряд приятных эффектов:

  • Вы можете реализовать и отладить модель физики / состояния как для игрока, так и для ИИ
  • Любые новые функции модели физики / состояния немедленно применяются как к игроку, так и к ИИ.
  • Автомобили игроков и ИИ ведут себя стабильно на трассе, что увеличивает воспринимаемую и фактическую справедливость (если вы хотите ограничить гонщиков, конечно, вы можете сделать это, изменив параметры на автомобилях)
  • Различные виды многопользовательской поддержки становятся намного проще в разработке.

Кстати, это частный случай отделения MVC .

Рассел Борогове
источник
2
Мне нравится этот ответ, но это последнее утверждение просто абсурдно. Удалите это, и у вас есть точка от меня. Разделение проблем ? - Конечно. Но MVC не распространяется на контекст вашего полного ответа.
инженер
1
Помимо того факта, что аспект View не обсуждается в вопросе или ответе, почему вы думаете, что абсурдно называть это MVC?
Рассел