Я слышал о дизайне, управляемом данными, и некоторое время изучал его. Итак, я прочитал несколько статей, чтобы получить концепции.
Одна из статей - Data Driven Design, написанная Кайлом Уилсоном, Как он описал, мне кажется, что код приложения (т.е. код для управления ресурсами, такими как память, сеть ...) и код игровой логики должны быть разделены, а код игровой логики должен управляться внешними источниками данных. В этот момент я могу представить, что разработчик написал бы своего рода редактор игры, который принимает внешние данные об игровых объектах (такие как информация о персонажах, информация об оружии, информация о карте ...). Дизайн сценария будет написан на языке / инструменте, написанном программистом, чтобы позволить игровому дизайнеру создавать взаимодействие между игровыми объектами. Дизайнер игры будет использовать существующий / пользовательский язык сценариев для написания сценария для игры или инструмент перетаскивания для создания игрового мира. Примером инструментального подхода, который я могу вспомнить, является World Editor, который обычно упаковывается вместе с играми Bliizard.
Тем не менее, другая статья против использования Data Driven Design, «Дело против Data Driven Design» . Автор предлагает не позволять игровому дизайну руководствоваться данными, потому что на разработку игры потребуется больше времени, так как игровой дизайнер несет бремя программирования. Вместо этого будет программист игры, который будет свободно программировать игру из эскиза и будет проверен разработчиком игры после завершения программирования игры. Он называет это программистом. То, что я думаю об этом методе, похоже на то, что я делал раньше: игровая логика - это само приложение, в отличие от приведенной выше идеи, приложение - редактор игр, а настоящая игра разработана на основе этого инструмента.
На мой взгляд, первый способ представляется более разумным, поскольку компоненты игры можно использовать во многих проектах. Со вторым методом, который противостоит дизайну, основанному на данных, код игры принадлежит только этой игре. Вот почему я думаю, что в Warcraft так много игровых жанров, как, например, оригинальный Warcraft и различные пользовательские карты, и одна из самых известных: DOTA, которая фактически определяет новый жанр. По этой причине я слышал, что люди называют World Editor игровым движком. Это правда, каким должен быть игровой движок?
Итак, после всего этого, я просто хочу проверить, есть ли какой-либо недостаток в моем понимании этих идей (управляемых данными, программистских накопителей, сценариев и т. Д ...)?
источник
Ответы:
Создание вашей игры (или любого программного продукта) на основе данных почти всегда является преимуществом. Единственный реальный минус в том, что вы можете потратить немного больше времени на создание соответствующих систем заранее; тем не менее, это окупится за всю оставшуюся карьеру программиста (даже если вы не будете использовать те же самые системы в течение всего этого времени, вы будете использовать методы, использованные для их создания).
Сложность, и где вступает в игру разъединение в этих двух статьях, которые вы связали, заключается в том , что вы выбираете для ввода данных и кого вы выбираете для предоставления доступа к этим данным. По сути, проектирование и разработка на основе данных просто означает, что вы помещаете информацию во внешнее хранилище, загружаете эту информацию во время выполнения и воздействуете на нее. Код вашего приложения выполняет то, что ему говорят внешние данные, а не вы пишете код приложения, который напрямую выполняет то, что, по вашему мнению, должно быть конечным результатом. Это не сложная идея.
Вам не нужно создавать сложные «компонентно-управляемые архитектуры» (как это принято сейчас). Помещение констант для настройки физики (сила тяжести, коэффициенты восстановления) в текстовом файле зависит от данных. Скрипты (в Lua или что-то еще) управляются данными. Описание вашего уровня данных в XML. Что-нибудь в этом роде.
Вы можете управлять практически любым компонентом программного обеспечения с данными, и вы можете выбирать, какие из них вы хотите сделать с этим. Время разработчика дорогое; время программиста особенно так. Если вы можете сэкономить время вам или другим программистам, поместив поведение и данные во внешнее хранилище и не требуя перекомпиляции игры для каждого небольшого изменения, вам следует это сделать. Вы сэкономите деньги и сделаете все быстрее.
Кроме того, вы подвергаетесь огромному риску, пытаясь сделать «дизайн дизайнеров», а программисты «делают эти проекты реальностью», заставляя программиста существовать в цикле итерации для работы дизайнера: вы рискуете заставить программиста почувствовать он просто обезьяна кода, постоянно вносящая мелкие изменения в дизайн. Это может значительно деморализовать большинство программистов, которые хотят работать над интересными техническими задачами, а не быть доверенным лицом дизайнера.
По вашим конкретным вопросам:
«Движок игры» на самом деле не имеет фиксированного определения. Как правило, это унифицированный набор базовых технологий, используемых для создания игры, обычно поддерживаемый набором связанных инструментов (и, следовательно, в значительной степени управляемых данными). Но это варьируется довольно широко от контекста к контексту.
Похоже, вы более или менее на правильном пути, хотя, возможно, вы слишком усложняете, что такое проектирование и разработка на основе данных, сопоставляя их с компонентными системами.
источник
Как автор второго поста, я хотел бы уточнить несколько моментов.
В конце концов, нет правильного или неправильного ответа. Вопрос в том, как вам и вашим коллегам комфортно работать. Когда я писал этот блог некоторое время назад, было много разговоров о том, как вся работа должна быть передана дизайнерам, и я хотел написать о том, как много успешных игровых компаний, о которых я знал, нашли другой баланс.
Кроме того, как примечание, моей записи в блоге 5 лет. Кажется, что в наши дни гораздо больше студий переходят на языки сценариев и еще много чего, но создают зрелые инструменты для их отладки, что было моей главной жалобой. Когда я написал это, я не думаю, что существовал Unreal Kismet, которым я не пользовался, но похоже, что они пытаются упростить сценарии, и у него, по-видимому, есть отладчик. (Понятия не имею, насколько хорошо это работает, хотя)
Что касается игр меньшего масштаба, я определенно не думаю, что вы захотите использовать язык сценариев или аналогичные функции в своей технологии, но если у вас огромная команда и много времени, чтобы посвятить технологии, это можно сделать Правильно и время может иметь смысл в зависимости от того, как ваша команда разработчиков любит работать. Лично я, вероятно, буду держаться за C ++ как можно дольше, потому что для меня это самый простой и быстрый способ, поскольку мне часто приходится пытаться обходить такие «функции», как сборка мусора.
источник
Вы должны посмотреть BitSquid Tech Engine . Он построен с использованием концепций DOD. Блог Никласа Фрикхольма очень интересный. Есть много статей о том, как этот двигатель разработан.
На GDC 2011 Никлас провел презентацию о Data Driven Renderer .
источник