Управление перемещениями в игровом пространстве

Мы рассмотрели вопросы дискретизации потому, что тип окружающей среды игрового мира оказывает непосредственное воздействие на поведение населяющих его персонажей. Более того, можно смело сказать, что именно окружающая среда навязывает персонажам тот или иной тип перемещений.
Независимо от того, является ли окружающая среда двухмерной или трехмерной, управление перемещениями выполняется по подобным алгоритмам. Хотя организовать такое управление можно самыми разными способами, все они сводятся примерно к одному подходу: расчет очередной итерации основного цикла, интеграция и обнаружение столкновений. Детальное изложение этого подхода интересно скорее с точки зрения разработки игровой машины, чем системы ИИ, однако немного позднее мы все же ознакомимся с основными принципами этого подхода, чтобы иметь о них представление.
Игровая машина должна уметь обрабатывать запросы на перемещение от всех собственных и несобственных персонажей, существующих в игровом мире. За разрешение конфликтов при столкновениях с элементами окружающей среды, а также с другими персонажами отвечает физическая подсистема игровой машины. После проведения расчетов все структуры данных, представляющие объекты игрового мира, должны быть обновлены в соответствии с новыми значениями скоростей, координат и ориентации в пространстве.
Подсистемы анимации современных игровых машин обеспечивают управление персонажами путем комбинирования низкоуровневых анимационных примитивов (low-level limb control), например ходьба и бег. Кошфетный набор анимационных примитивов выбирается на основе высокоуровневых управляющих воздействий, задаваемых игроком. Таким образом, персонажи в играх на самом деле не ходят (т.е. не проявляют активного осмысленного поведения), а просто прорисовываются путем анимации (т.е. являются пассивными объектами управления). Для того чтобы не разрушать эффект реальности (например, если происходит ходьба на месте при столкновении со стеной, бег в воздухе и т.п.), подсистема анимации должна получать соответствующую информацию от физической подсистемы.
По ряду причин низкоуровневые аспекты перемещений абстрагируются ог того, кто управляет персонажами (в первую очередь, с целью упрощения задачи). Охугветствую-щий базовый уровень управления называется уровнем локомоций (locomotion layer). Благодаря наличию этого уровня его вполне могуг использовать и несобственные персонажи. На практике в современных играх так и происходит — управление всеми персонажами, как собственными, так и несобственными, реализуется на основе одного и того же базового кода. Это позволяет уменьшить количество программного кода, необходимого для создания системы ИИ, путем простого наследования классами системы ИИ соогвет-ствующих классов, аааднных для управления собственными персонажами (проще говоря, путем использования в обоих случаях одних и тех же фушщий просчета локомоций).
Возможно, в ближайшем будущем системы ИИ смогуг избавиться от использования низкоуровневых анимационных примитивов и начнут обеспечивать полноценные динамические методы управления. Что касается собственных персонажей, для них системы управления вряд ли изменятся, поскольку их движения могуг быть очень сложными. Конечно, можно будет поручить системе ИИ управлять и собственными персонажами, но тогда проблема возникнет с инерцией мышления живых игроков — им придется привыкнуть к тому, что ногами их персонажей управляет ИИ! Теоретически, система ИИ может управлять не только перемещениями, но и всеми телодвижениями несобственных персонажей, успевая при этом обрабатывать и высокоуровневые запросы на выполнение локомоций. Однако выделение управления локомоциями в отдельную подзадачу дает разработчикам дополнительные преимущества (в частности, упрощение профаммного кода при незначительном увеличении его избыточности). По-видимому, такое разделение задачи управления персонажами на отдельные подзадачи сохранится и в ближайшем будущем.