В этот раз мы уйдём ещё глубже, так что этот пост может быть сложнее для ребят далёких от мира программирования, так что не стесняйтесь задавать вопросы в комментариях!
Ещё одна вещь, которая заинтересовала меня в том, как устроен ИИ в The Last of Us – дизайн кода. В нём никогда не упоминались типы персонажей, а вместо этого указывались наборы характеристик, определяющих каждый из типов. Лучшее описание этому – все типы заражённых имеют всего один класс C++ и различаются только набором навыков и значениями переменных в файлах данных.
К примеру, код ссылается на тип зрения персонажа вместо того, чтобы проверить, является ли он бегуном или щелкуном. Это может казаться незначительным отличием, но хорошо показывает усилия разработчиков по сохранению общего характера кода. Вместо того чтобы разносить определения персонажей в виде куч проверок по всему коду, они сосредоточили их на настраиваемых данных.
Из плюсов которое это даёт: игровые дизайнеры, которые далеки от программирования, могли не трогая команду ИИ самостоятельно редактировать параметры персонажей. А ещё это невероятно упрощает добавление новых типов таковых, вместо создания новых классов и поиска в коде всех мест, где идёт ссылка на персонажей достаточно просто добавить или удалить нужные навыки!
Но почему все не делают так? Такой подход требует невероятной и постоянной бдительности. У разработчиков было много случаев, когда они испытывали искушение упросить немного жизнь и добавить проверку на определённый тип для реализации одной фичи. Но эта одна вещь имеет тенденцию разрастаться по мере расширения и повторного использования кода. Тут урок заключается в том, чтобы оставаться верным своим принципам проектирования и разработки, ведь сложность при проектировании потом окупится стабильностью и простотой реализации новых возможностей.
Ещё одним преимуществом стало – упрощение реализации системы уровней сложности. Вместо десятков и сотен проверок на текущий уровень таковой, достаточно поменять параметры в скиллах персонажей и готово!
В целом, такой подход в разработке называется Data-driven, вы кстати могли видеть его, ведь последние пару лет Mojang активно вносят его в Minecraft, позволяя датапаками не только редактировать характеристики и поведение игры, но и создавать свои собственные предметы и энтитей! И это без навыков программирования.
Кстати, даже среди моих разработок есть применения data-driven подхода, это система настроек чатов в Имперском Стражнике! Вместо задачи всех десятков параметров кучами проверок и условий, они заданы лишь определениями типов и ссылками на языковые строки и дефолтными настройками, пример вы можете увидеть на скриншоте, который я подкрепил к посту. Вот как-то так :3
#devblogTLoU #devblogTLoUAI #thinking
Post #544
2.49K

- ❤ 42
- 🔥 8
- 👾 4
- ❤🔥 3
- 🦄 3
- 🙊 2
- 🤩 1