Привет, Хаброжители!
Джереми Гибсона Бонд задумывая эту книгу, ставил перед собой простую цель: познакомить вас со всеми инструментами и передать начальные знания, необходимые для достижения успеха в разработке игр и прототипов. Автор постарался втиснуть в эту книгу максимальный объем знаний. В отличие от многих других книг, эта сочетает обе дисциплины — проектирование игр и цифровую разработку (то есть компьютерное программирование) — и обертывает их практикой итеративного прототипирования. Появление продвинутых и относительно простых в использовании игровых движков, таких как Unity, еще больше упростило создание прототипов, выражающих концепции игрового дизайна, и увеличило ваши шансы стать квалифицированным (и востребованным) дизайнером игр.
Книга делится на четыре части
Первая часть книги начинается с исследования разных теорий проектирования игр и аналитических основ игрового дизайна, предлагавшихся в некоторых более ранних книгах. В этой части описывается многуровневая тетрада (Layered Tetrad) — способ объединения и расширения лучших черт этих более ранних теорий. Исследованию многоуровневой тетрады уделено много внимания, потому что это касается многих решений, которые вам придется принимать как проектировщику интерактивных взаимодействий. В этой части также содержится информация об интересных проблемах разных дисциплин проектирования игр; описывается процесс прототипирования на бумаге, тестирование и выполнение итераций; дается конкретная информация, способная помочь вам стать одним из лучших проектировщиков; представляются эффективные стратегии управления проектами и временем, помогающие обеспечить соблюдение графика разработки проекта.
Вторая часть книги учит программированию. Эта часть опирается на мой многолетний опыт обучения студентов нетехнических специальностей приемам выражения идей проектирования игр в цифровом коде. Если у вас нет опыта разработки или программирования, эта часть для вас. Но даже имеющие некоторый опыт могут просмотреть эту часть, чтобы познакомиться с новыми приемами или освежить в памяти некоторые подходы. Вторая часть охватывает C# — наш язык программирования — от самых основ до наследования классов и приемов объектно-ориентированного программирования.
Третья часть книги включает несколько примеров, каждый из которых демонстрирует процесс разработки прототипа игры определенного жанра. Эта часть преследует две цели: раскрывает некоторые передовые приемы быстрого прототипирования игр на примере моего собственного подхода к прототипированию и помогает сформировать фундамент, опираясь на который вы сможете создавать свои игры. Многие книги, рассказывающие о Unity (наше окружение для разработки игр) используют похожий подход, но ведут читателя через единственный монолитный пример на протяжении нескольких сотен страниц. Эта книга, напротив, демонстрирует несколько намного более коротких примеров. Конечные результаты этих примеров неизбежно менее надежны, чем те, что можно найти в других книгах, но я убежден, что разнообразие поможет вам лучше подготовиться к созданию собственных проектов в будущем.
В этой книге есть несколько важных приложений, заслуживающих упоминания здесь. Чтобы не повторять одну и ту же информацию и не заставлять вас искать ее по разным главам, вся информация, которая многократно упоминается в книге или к которой, как мне кажется, вы захотите обратиться позже (когда закончите чтение книги в первый раз), помещена в приложения. Приложение A содержит краткое пошаговое введение в процедуру создания проекта игры в Unity. Самое длинное приложение — приложение Б «Полезные идеи». Несмотря на непритязательное название, вы, я уверен, чаще всего будете обращаться именно к этому приложению, после того как прочитаете книгу в первый раз. «Полезные идеи» — это сборник передовых приемов и стратегий, которыми я сам постоянно пользуюсь, выполняя прототипирование игр, и думаю, что здесь вы найдете много интересного для себя. Третье, и заключительное, приложение — список ссылок на ресурсы в интернете, где вы найдете ответы на вопросы, не охваченные этой книгой. Часто бывает трудно определить правильное место для поиска помощи; в этом приложении собраны ссылки, которыми я сам пользуюсь чаще всего.
Еще одно применение математики и программ, таких как Google Sheets, в проектировании игр заключается в балансировке разных видов оружия и возможностей. В этом разделе вы увидите процесс балансировки оружия для игры, похожей на Valkyria Chronicles компании Sega. В этой игре у каждого оружия есть три важные характеристики:
При балансировке разных видов оружия обычно преследуется цель сделать их примерно равными по мощности, но при этом придать отличительные черты. Например, такие отличительные черты могут быть у некоторых видов оружия:
На рис. 11.14 показаны значения характеристик оружия, которые мне показались удачными на первый взгляд. Значение ToHit (Для попадания) — это минимальное количество очков, выпавшее при броске шестигранного кубика, которое означает попадание в цель на данном расстоянии. Например, для пистолета в ячейке K3, соответствующей расстоянию 7 единиц, указано число 4, то есть если игрок делает выстрел на расстоянии 7 единиц, будет считаться, что он попал в цель, если на кубике выпадет число 4 или больше. Это дает 50 % вероятность попадания (потому что попадание засчитывается, если выпадет 4, 5 или 6 очков).
В ячейках под заголовком Percent Chance (Процент вероятности) нам нужно рассчитать вероятность попадания в цель каждой пули, выпущенной из данного оружия на данной дистанции. Для этого выполните следующие шаги.
1. Создайте новый документ в Google Sheets и введите все данные, как показано на рис. 11.14. Чтобы изменить цвет фона ячеек, используйте кнопку Cell Color (Цвет заливки) в инструментах форматирования ячеек (рис. 11.2).
Судя по значению в ячейке E3, выстрел из пистолета на расстоянии в 1 единицу достигает цели, если при броске кубика выпадет 2 очка или больше. Это означает, что промах происходит, только когда выпадает 1 очко, а при выпадении 2, 3, 4, 5 или 6 очков выстрел достигает цели. Значит, доля попаданий составляет 5/6 (или ≈ 83 %), и теперь нам нужна формула для ее вычисления. Согласно правилу 7 определения вероятностей, это соответствует вероятности промаха, равной 1/6 (то есть число в ToHit минус 1 и деленное на 6).
2. Выберите ячейку P3 и введите формулу =(E3-1)/6. В результате в ячейке P3 отобразится вероятность промаха из пистолета на расстоянии в 1 единицу. Арифметические операции в Sheets выполняются в соответствии с правилами математики, поэтому деление выполнится перед вычитанием, если не заключить выражение E3-1 в круглые скобки.
3. Снова воспользуемся правилом 7. Согласно ему, 1 — вероятность промаха = вероятность поражения, поэтому замените формулу в ячейке P3 на =1-((E3-1)/6). Теперь в ней должно появиться число 0,8333333.
4. Чтобы преобразовать десятичную дробь в ячейке P3 в проценты, выберите ячейку P3 и щелкните на кнопке с символом % в области инструментов форматирования чисел, как показано на рис. 11.2. Можно также пару раз щелкнуть на кнопке, находящейся правее кнопки с символом % (с надписью .0 и стрелкой влево). Она удалит десятичные знаки, и в ячейке будет отображаться только число 83% вместо более точного, но запутывающего %83.33. В этом случае изменится только отображаемое значение — фактическое число останется прежним, — и ячейка сохранит точность для дальнейших вычислений.
5. Скопируйте формулу из ячейки P3 и вставьте ее во все ячейки P3:Y7. Вы увидите, что все расчеты выполнились благополучно, за исключением пустых ячеек в разделе ToHit (Для попадания), для которых процент попаданий составляет 117%! Изменим формулу, чтобы она игнорировала пустые ячейки.
Снова выберите ячейку P3 и замените в ней формулу на =IF(E3="", "", 1-((E3-1)/6)). Функция IF в Sheets имеет три аргумента, разделенных запятыми.
7. Скопируйте новую формулу из ячейки P3 и вставьте ее в ячейки P3:Y7. Теперь пустым ячейкам в разделе ToHit (Для попадания) будут соответствовать пустые ячейки в разделе Percent Chance (Процент вероятности). (Например, L5:N5 — пустые ячейки, поэтому соответствующие им ячейки W5:Y5 также будут пустыми.)
8. Далее, добавим немного цвета в эту диаграмму. Выберите ячейки P3:Y7. В меню Sheets выберите пункт Format > Conditional formatting (Формат > Условное форматирование...). Справа в окне появится новая панель Conditional format rules (Правила условного форматирования). Условное форматирование позволяет определить формат отображения ячеек в зависимости от их содержимого.
9. Щелкните на вкладке Color scale (Градиент) в верхней части панели Conditional format rules (Правила условного форматирования).
10. В разделе Preview (Предварительный просмотр) на вкладке Color scale (Градиент) вы увидите слово Default (По умолчанию) на изображении градиента зеленого цвета. Щелкните на слове Default (По умолчанию) и выберите вариант внизу в центре: Green to yellow to red (От зеленого к красному через желтый).
11. Щелкните на кнопке Done (Готово), и раздел Percent Chance (Процент вероятности) приобретет вид, как на рис. 11.15.
Следующий шаг в процессе балансировки — определение среднего урона, наносимого каждым видом оружия на определенном расстоянии. Поскольку некоторые виды оружия делают сразу несколько выстрелов и каждый выстрел наносит определенный урон, средний урон будет равен произведению числа выстрелов на урон одного выстрела и на вероятность попадания каждой пули:
1. Выделите столбцы O:Z и скопируйте их (нажмите комбинацию Command-C или Ctrl+C на PC или выберите пункт меню Edit > Copy (Правка > Копировать)).
2. Выберите ячейку Z1 и выполните вставку (Command-V, Ctrl+V на PC или выберите пункт меню Edit > Paste (Правка > Вставить)). В результате в таблицу добавятся дополнительные столбцы AA:AK и заполнятся данными из только что скопированных столбцов.
3. Введите текст Average Damage в ячейку AA1.
4. Выберите ячейку AA3 и введите в нее формулу =IF(P3="", "", $B3*$C3*P3). Так же как в формуле для ячейки P3, функция IF гарантирует, что вычисления будут выполняться только для непустых ячеек. Формула включает абсолютные ссылки на столбцы $B и $C, потому что столбец B хранит число выстрелов, а столбец C — урон, наносимый одним выстрелом независимо от расстояния до врага. В данном случае смещаться при копировании должны только номера строк, но не столбцов (поэтому только столбцы описываются абсолютными ссылками).
5. Выберите ячейку AA3 и щелкните на самой правой кнопке в области с инстру-
ментами форматирования чисел (с надписью 123). Выберите пункт Number
(Число) в открывшемся меню.
6. Скопируйте ячейку AA3 и вставьте ее в ячейки AA3:AJ7. Теперь в них будут отображаться точные значения, но условное форматирование все еще привязано к разделу Percent Chance (Процент вероятности), из-за чего числа выше 1 вынуждают проценты в диапазоне от 0 до 100 % в разделе Percent Chance (Процент вероятности) отображаться на зеленом фоне.
7. Выберите ячейки AA3:AJ7. Если панель Conditional format rules (Правила условного
форматирования) больше не отображается, выберите в главном меню пункт Format > Conditional formatting (Формат > Условное форматирование...), чтобы вновь открыть ее.
8. С выбранными ячейками AA3:AJ7 вы должны увидеть в панели Conditional format rules (Правила условного форматирования) правило с заглавием Color scale (Градиент) и со ссылками на ячейки P3:Y7,AA3:AJ7 под ним. Щелкните на этом правиле.
9. В открывшихся настройках, в разделе Apply to range (Применить к диапазону) оставьте только P3:Y7 и щелкните на кнопке Done (Готово). В результате будет восстановлено прежнее оформление раздела Percent Chance (Процент вероятности).
10. Выберите ячейки AA3:AJ7 еще раз. В панели Conditional format rules (Правила условного форматирования) щелкните на кнопке Add new rule (Добавить правило).
11. Выберите в поле Preview (Предварительный просмотр) на вкладке Color scale (Градиент) вариант Green to yellow to red (От зеленого к красному через желтый), как прежде. Затем щелкните на кнопке Done (Готово).
В результате к разделам Percent Chance (Процент вероятности) и Average Damage (Средний урон) будут применены разные правила форматирования. Отделение правил для разных областей гарантирует их раздельное применение, что важно, потому что диапазоны чисел в разных разделах слишком отличаются друг от друга. Теперь раздел Average Damage (Средний урон) должен выглядеть так, как показано на рис. 11.15.
Следующий важный шаг — вывод графиков среднего урона. Даже при том, что внимательное изучение цифр уже позволяет делать некоторые выводы, графики, поддерживаемые в Sheets, упростят эту работу и помогут визуально оценить происходящее. Для этого выполните следующие шаги.
1. Выберите ячейки A2:A7.
2. Прокрутите лист так, чтобы можно было видеть раздел Average Damage (Средний урон). Со все еще выделенными ячейками A2:A7 нажмите и удерживайте нажатой клавишу Command (или Ctrl на PC), нажмите левую кнопку мыши на ячейке AA2 и, удерживая нажатой клавишу и кнопку мыши, переместите указатель на ячейку AJ7, чтобы выделить область AA2:AJ7. Теперь у вас должны быть выделены две области: A2:A7 и AA2:AJ7.
3. Щелкните на кнопке диаграммы (см. рис. 11.2), чтобы открыть редактор диаграмм.
4. Щелкните на раскрывающемся списке Chart type (Тип диаграммы, в котором сейчас отображается текст «Column chart» («Столбчатая диаграмма»), см. рис. 11.6A) и выберите самый левый тип в разделе Line (Графики) — это левая верхняя пиктограмма с изображениями синей и красной ломаных линий.
5. В нижней части на вкладке DATA (ДАННЫЕ) установите флажок Switch rows / columns (Строки/столбцы).
6. Установите флажок Use column A as headers (Заголовки — значения столбца A). Убедитесь также, что установлен флажок Use row 2 as labels (Ярлыки — значения строки 2).
7. Щелкните на кнопке закрытия панели Chart editor (Редактор диаграмм), чтобы завершить создание графиков.
В результате у вас получится диаграмма как на рис. 11.16. Как видите, с оружием не все гладко. Некоторые виды, такие как снайперская винтовка (Sniper Rifle) и дробовик (Shotgun), имеют ярко выраженные отличительные черты, как мы и надеялись (дробовик обладает большой убойной силой на близких дистанциях, а снайперская
винтовка лучше подходит для поражения целей на дальних дистанциях), но среди других явно наблюдаются проблемы:
Проще говоря, разные виды оружия плохо сбалансированы между собой.
В процессе балансировки оружия удобно иметь перед глазами информацию до и после балансировки:
1. Для начала переместите диаграмму вниз, ниже строки 16.
2. Дважды щелкните в пределах диаграммы, после чего откроется панель Chart editor (Редактор диаграмм). Выберите вкладку CUSTOMIZE (ДОПОЛНИТЕЛЬНЫЕ) в верхней части панели (рис. 11.6D). Распахните раздел Chart axis & titles (Названия диаграмм и осей, рис. 11.6E) и введите в поле Title (Название) текст Original (Исходный баланс, рис. 11.6F).
3. Теперь нужно скопировать уже добавленные данные и формулы. Выберите ячейки A1:AK8 и скопируйте их.
4. Щелкните на ячейке A9 и выполните вставку. В результате должны появиться новые ячейки A9:AK16 — полная копия всех прежде созданных данных.
5. Замените текст в ячейке A10 на Rebalanced (После балансировки). В этом наборе мы будем вносить изменения и пробовать новые значения.
6. Чтобы на основе новых данных создать диаграмму, идентичную той, что отображает исходные данные, выберите диапазоны ячеек A10:A15,AA10:AJ15, в точности как вы выбирали ячейки A2:A7,AA2:AJ7 в шагах 1 и 2 в разделе «Вывод графиков среднего урона». Следуйте дальнейшим инструкциям в том разделе и создайте вторую диаграмму, отображающую балансируемые значения.
7. Расположите новую диаграмму правее предыдущей, чтобы можно было видеть обе диаграммы и данные над ними.
8. Замените название новой диаграммы на Rebalanced (После балансировки).
Добавим еще одну статистику, которую тоже полезно видеть, — общий урон. Это сумма среднего урона, наносимого оружием во всех диапазонах, которая позволит вам получить представление об общей мощности оружия. Для этого можно воспользоваться трюком, который я часто использую для создания простых гистограмм внутри ячеек в электронной таблице (то есть не в виде отдельных диаграмм). Результат показан на рис. 11.17.
1. Щелкните правой кнопкой мыши на заголовке столбца AK и в открывшемся меню выберите пункт Insert 1 right (Вставить справа: 1).
2. Щелкните правой кнопкой мыши на заголовке столбца B и выберите пункт Copy (Копировать). В результате в буфер обмена будет скопирован весь столбец B.
3. Щелкните правой кнопкой мыши на заголовке столбца AL и выберите пункт Paste (Вставить). В результате в столбец AL будет вставлено содержимое столбца B, включая оформление фона и шрифта.
4. Щелкните правой кнопкой мыши на заголовке столбца AL и выберите пункт Insert 1 right (Вставить справа: 1).
5.Введите в ячейки AL1 и AL9 текст Overall Damage (Общий урон).
6. Выберите ячейку AL3 и введите формулу =SUM(AA3:AJ3). Она вычисляет средний урон, наносимый пистолетом во всех диапазонах (он должен быть равен 45.33).
7. Чтобы выполнить трюк с гистограммой, нужно преобразовать это вещественное число в целое, то есть результат функции SUM требуется округлить. Замените формулу в AL3 на: =ROUND( SUM(AA3:AJ3) ). Теперь в ячейке должно отобразиться число 45.00. Чтобы удалить лишние нули, выберите ячейку AL3 и щелкните на кнопке удаления десятичных знаков, как вы уже делали это прежде (третья кнопка в инструментах форматирования чисел).
8. Выберите ячейку AM3 и введите формулу =REPT("|", AL3). Функция REPT повторяет текст в первом аргументе заданное число раз во втором аргументе. Текстом в данном случае служит символ вертикальной черты (чтобы ввести его, нужно нажать клавишу Shift и, удерживая ее, нажать клавишу с обратным слешем (\), которая на большинстве клавиатур находится над клавишей Return/Enter), и он будет повторен 45 раз, потому что ячейка AL3 содержит значение 45. В ячейке AM3 появится небольшая колонка, простирающаяся вправо. Щелкните дважды на правой границе в заголовке столбца AM, чтобы раскрыть его до требуемой ширины.
9. Выберите ячейки AL3:AM3 и скопируйте их. Вставьте содержимое буфера обмена в ячейки AL3:AM7 и AL11:AM15. Теперь у вас перед глазами будет текстовая гистограмма, отображающая общий урон всех видов оружия, исходный и после балансировки. Наконец, снова отрегулируйте ширину столбца AM, чтобы видеть все символы вертикальной черты.
Теперь у нас есть два набора данных и две диаграммы, и можно пробовать балансировать оружие. Как увеличить мощность пулемета? Что следует увеличить — количество выстрелов, вероятность попадания в цель или убойную силу одного выстрела? При балансировке следует учитывать некоторые дополнительные правила игры.
Попробуйте сами сбалансировать эти параметры оружия, изменяя только значения в ячейках B11:N15. Не трогайте исходные параметры и ничего не меняйте в разделах Percent Chance (Процент вероятности) и Average Damage (Средний урон); они оба, так же как диаграмма Rebalanced (После балансировки), будут обновляться автоматически и отражать изменения, произведенные вами в ячейках Shots (Выстрелов), D/Shot (Урон/Выстрел) и ToHit (Для попадания). Поиграв с числами, продолжайте чтение.
На рис. 11.17 можно видеть параметры оружия, которые я подобрал для спроектированного прототипа. Конечно, это не единственный способ балансировки оружия, и даже не самый лучший, но он позволяет достичь многих целей дизайна.
Несмотря на то что такая балансировка с применением электронной таблицы не охватывает всех возможных последствий дизайна оружия, она все еще остается важным инструментом в арсенале дизайнера, потому что помогает быстро проанализировать большие объемы данных. Некоторые дизайнеры бесплатных игр большую часть своего времени проводят за корректировкой данных в электронных таблицах, стараясь сделать свои игры чуть более сбалансированными, поэтому если вы собираетесь работать в сфере дизайна игр, владение электронными таблицами и проектированием на основе данных (что мы только что сделали) вам очень пригодится.
Одним из последних ключевых элементов поддержки баланса игры, который мы обсудим, является понятие положительной и отрицательной обратной связи. В игре с положительной обратной связью игрок, захвативший лидерство с самого начала, получает дополнительное преимущество и, скорее всего, победит. В игре с отрицательной обратной связью преимущество получают проигрывающие игроки.
Покер — отличный пример игры с положительной обратной связью. Если игрок выигрывает большой банк и денег у него больше, чем у других игроков, отдельные ставки значат для него меньше и у него больше свободы делать такие шаги, как блеф (потому что он может позволить себе потерять что-то). Напротив, у игрока, потерявшего деньги в начале игры, меньше свободы действий и нет возможности рисковать. Сильная положительная обратная связь есть в игре Monopoly, где игрок, обладающий лучшими объектами, постоянно получает больше денег и способен заставить других игроков продавать свои объекты, если они оказываются не в состоянии платить арендную плату, когда попадают на свои участки. Для большинства игр положительная обратная связь — нежелательное явление, но она хорошо подходит для случаев, когда требуется, чтобы игра завершалась быстро (хотя в Monopoly это преимущество не используется, потому что дизайнер этой игры хотел показать несчастья бедных в капиталистическом обществе). В играх с одним игроком также часто есть механизмы положительной обратной связи, цель которых — дать игроку почувствовать себя всесильным в игре.
Mario Kart — прекрасный пример игры с отрицательной обратной связью в форме случайных предметов, присуждаемых игроку, когда тот наезжает на коробки. Обычно игрок получает банан (по сути, оружие защиты), связку из трех бананов или зеленую ракушку (один из самых слабых видов оружия). Игрок на последнем месте часто получает более мощные предметы, такие как молния, которая замедляет всех других игроков, участвующих в гонке. Отрицательная обратная связь делает игры более справедливыми по отношению к игрокам, не сумевшим пробиться в лидеры, и более длинными, а также дает всем игрокам возможность почувствовать, что у них все еще есть шанс выиграть, даже если они сильно отстают.
В этой главе было много математики, но, я надеюсь, вы убедились, что знание ее очень пригодится вам как дизайнеру игр. Большинство тем, затронутых в этой главе, заслуживают отдельной книги, поэтому я призываю продолжить их изучение, если они вам интересны.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 20% по купону — Unity
По факту оплаты бумажной версии книги на e-mail высылается электронная версия книги.
Джереми Гибсона Бонд задумывая эту книгу, ставил перед собой простую цель: познакомить вас со всеми инструментами и передать начальные знания, необходимые для достижения успеха в разработке игр и прототипов. Автор постарался втиснуть в эту книгу максимальный объем знаний. В отличие от многих других книг, эта сочетает обе дисциплины — проектирование игр и цифровую разработку (то есть компьютерное программирование) — и обертывает их практикой итеративного прототипирования. Появление продвинутых и относительно простых в использовании игровых движков, таких как Unity, еще больше упростило создание прототипов, выражающих концепции игрового дизайна, и увеличило ваши шансы стать квалифицированным (и востребованным) дизайнером игр.
Книга делится на четыре части
Часть I. Проектирование игры и прототипирование на бумаге
Первая часть книги начинается с исследования разных теорий проектирования игр и аналитических основ игрового дизайна, предлагавшихся в некоторых более ранних книгах. В этой части описывается многуровневая тетрада (Layered Tetrad) — способ объединения и расширения лучших черт этих более ранних теорий. Исследованию многоуровневой тетрады уделено много внимания, потому что это касается многих решений, которые вам придется принимать как проектировщику интерактивных взаимодействий. В этой части также содержится информация об интересных проблемах разных дисциплин проектирования игр; описывается процесс прототипирования на бумаге, тестирование и выполнение итераций; дается конкретная информация, способная помочь вам стать одним из лучших проектировщиков; представляются эффективные стратегии управления проектами и временем, помогающие обеспечить соблюдение графика разработки проекта.
Часть II. Цифровое прототипирование
Вторая часть книги учит программированию. Эта часть опирается на мой многолетний опыт обучения студентов нетехнических специальностей приемам выражения идей проектирования игр в цифровом коде. Если у вас нет опыта разработки или программирования, эта часть для вас. Но даже имеющие некоторый опыт могут просмотреть эту часть, чтобы познакомиться с новыми приемами или освежить в памяти некоторые подходы. Вторая часть охватывает C# — наш язык программирования — от самых основ до наследования классов и приемов объектно-ориентированного программирования.
Часть III. Прототипы игр и примеры
Третья часть книги включает несколько примеров, каждый из которых демонстрирует процесс разработки прототипа игры определенного жанра. Эта часть преследует две цели: раскрывает некоторые передовые приемы быстрого прототипирования игр на примере моего собственного подхода к прототипированию и помогает сформировать фундамент, опираясь на который вы сможете создавать свои игры. Многие книги, рассказывающие о Unity (наше окружение для разработки игр) используют похожий подход, но ведут читателя через единственный монолитный пример на протяжении нескольких сотен страниц. Эта книга, напротив, демонстрирует несколько намного более коротких примеров. Конечные результаты этих примеров неизбежно менее надежны, чем те, что можно найти в других книгах, но я убежден, что разнообразие поможет вам лучше подготовиться к созданию собственных проектов в будущем.
Часть IV. Приложения
В этой книге есть несколько важных приложений, заслуживающих упоминания здесь. Чтобы не повторять одну и ту же информацию и не заставлять вас искать ее по разным главам, вся информация, которая многократно упоминается в книге или к которой, как мне кажется, вы захотите обратиться позже (когда закончите чтение книги в первый раз), помещена в приложения. Приложение A содержит краткое пошаговое введение в процедуру создания проекта игры в Unity. Самое длинное приложение — приложение Б «Полезные идеи». Несмотря на непритязательное название, вы, я уверен, чаще всего будете обращаться именно к этому приложению, после того как прочитаете книгу в первый раз. «Полезные идеи» — это сборник передовых приемов и стратегий, которыми я сам постоянно пользуюсь, выполняя прототипирование игр, и думаю, что здесь вы найдете много интересного для себя. Третье, и заключительное, приложение — список ссылок на ресурсы в интернете, где вы найдете ответы на вопросы, не охваченные этой книгой. Часто бывает трудно определить правильное место для поиска помощи; в этом приложении собраны ссылки, которыми я сам пользуюсь чаще всего.
Отрывок. Использование Google Sheets для балансировки оружия
Еще одно применение математики и программ, таких как Google Sheets, в проектировании игр заключается в балансировке разных видов оружия и возможностей. В этом разделе вы увидите процесс балансировки оружия для игры, похожей на Valkyria Chronicles компании Sega. В этой игре у каждого оружия есть три важные характеристики:
- Количество выстрелов, производимых одновременно.
- Степень повреждений, производимых каждым выстрелом.
- Вероятность попадания в цель каждой выпущенной пули на данной дистанции.
При балансировке разных видов оружия обычно преследуется цель сделать их примерно равными по мощности, но при этом придать отличительные черты. Например, такие отличительные черты могут быть у некоторых видов оружия:
- Пистолет: основное оружие; позволяет справляться с большинством ситуаций, но не самое лучшее.
- Винтовка: хороший выбор для поражения целей на средних и дальних дистанциях.
- Дробовик: убойное оружие на коротких дистанциях, но его мощность быстро падает с увеличением расстояния; имеет низкую скорострельность, поэтому точность имеет большое значение.
- Снайперская винтовка: крайне неудачный выбор для ближнего боя, но фантастическое оружие для стрельбы на дальние дистанции.
- Пулемет: обладает высокой скорострельностью, поэтому даже при не самой высокой точности обладает высокой убойной силой, благодаря этому кажется самым надежным оружием, хотя и не самым мощным.
На рис. 11.14 показаны значения характеристик оружия, которые мне показались удачными на первый взгляд. Значение ToHit (Для попадания) — это минимальное количество очков, выпавшее при броске шестигранного кубика, которое означает попадание в цель на данном расстоянии. Например, для пистолета в ячейке K3, соответствующей расстоянию 7 единиц, указано число 4, то есть если игрок делает выстрел на расстоянии 7 единиц, будет считаться, что он попал в цель, если на кубике выпадет число 4 или больше. Это дает 50 % вероятность попадания (потому что попадание засчитывается, если выпадет 4, 5 или 6 очков).
Определение вероятности попадания для каждой пули
В ячейках под заголовком Percent Chance (Процент вероятности) нам нужно рассчитать вероятность попадания в цель каждой пули, выпущенной из данного оружия на данной дистанции. Для этого выполните следующие шаги.
1. Создайте новый документ в Google Sheets и введите все данные, как показано на рис. 11.14. Чтобы изменить цвет фона ячеек, используйте кнопку Cell Color (Цвет заливки) в инструментах форматирования ячеек (рис. 11.2).
Судя по значению в ячейке E3, выстрел из пистолета на расстоянии в 1 единицу достигает цели, если при броске кубика выпадет 2 очка или больше. Это означает, что промах происходит, только когда выпадает 1 очко, а при выпадении 2, 3, 4, 5 или 6 очков выстрел достигает цели. Значит, доля попаданий составляет 5/6 (или ≈ 83 %), и теперь нам нужна формула для ее вычисления. Согласно правилу 7 определения вероятностей, это соответствует вероятности промаха, равной 1/6 (то есть число в ToHit минус 1 и деленное на 6).
2. Выберите ячейку P3 и введите формулу =(E3-1)/6. В результате в ячейке P3 отобразится вероятность промаха из пистолета на расстоянии в 1 единицу. Арифметические операции в Sheets выполняются в соответствии с правилами математики, поэтому деление выполнится перед вычитанием, если не заключить выражение E3-1 в круглые скобки.
3. Снова воспользуемся правилом 7. Согласно ему, 1 — вероятность промаха = вероятность поражения, поэтому замените формулу в ячейке P3 на =1-((E3-1)/6). Теперь в ней должно появиться число 0,8333333.
4. Чтобы преобразовать десятичную дробь в ячейке P3 в проценты, выберите ячейку P3 и щелкните на кнопке с символом % в области инструментов форматирования чисел, как показано на рис. 11.2. Можно также пару раз щелкнуть на кнопке, находящейся правее кнопки с символом % (с надписью .0 и стрелкой влево). Она удалит десятичные знаки, и в ячейке будет отображаться только число 83% вместо более точного, но запутывающего %83.33. В этом случае изменится только отображаемое значение — фактическое число останется прежним, — и ячейка сохранит точность для дальнейших вычислений.
5. Скопируйте формулу из ячейки P3 и вставьте ее во все ячейки P3:Y7. Вы увидите, что все расчеты выполнились благополучно, за исключением пустых ячеек в разделе ToHit (Для попадания), для которых процент попаданий составляет 117%! Изменим формулу, чтобы она игнорировала пустые ячейки.
Снова выберите ячейку P3 и замените в ней формулу на =IF(E3="", "", 1-((E3-1)/6)). Функция IF в Sheets имеет три аргумента, разделенных запятыми.
- E3="": аргумент 1 — условие: равно ли содержимое ячейки E3 пустому значению ""? (то есть E3 — пустая ячейка?)
- "": аргумент 2 — что поместить в ячейку, если условие в первом аргументе истинно. То есть если E3 — пустая ячейка, очистить ячейку P3.
- 1-((E3-1)/6): аргумент 3 — что поместить в ячейку, если условие в первом аргументе ложно. То есть если E3 — не пустая ячейка, использовать данную формулу.
7. Скопируйте новую формулу из ячейки P3 и вставьте ее в ячейки P3:Y7. Теперь пустым ячейкам в разделе ToHit (Для попадания) будут соответствовать пустые ячейки в разделе Percent Chance (Процент вероятности). (Например, L5:N5 — пустые ячейки, поэтому соответствующие им ячейки W5:Y5 также будут пустыми.)
8. Далее, добавим немного цвета в эту диаграмму. Выберите ячейки P3:Y7. В меню Sheets выберите пункт Format > Conditional formatting (Формат > Условное форматирование...). Справа в окне появится новая панель Conditional format rules (Правила условного форматирования). Условное форматирование позволяет определить формат отображения ячеек в зависимости от их содержимого.
9. Щелкните на вкладке Color scale (Градиент) в верхней части панели Conditional format rules (Правила условного форматирования).
10. В разделе Preview (Предварительный просмотр) на вкладке Color scale (Градиент) вы увидите слово Default (По умолчанию) на изображении градиента зеленого цвета. Щелкните на слове Default (По умолчанию) и выберите вариант внизу в центре: Green to yellow to red (От зеленого к красному через желтый).
11. Щелкните на кнопке Done (Готово), и раздел Percent Chance (Процент вероятности) приобретет вид, как на рис. 11.15.
Вычисление среднего урона
Следующий шаг в процессе балансировки — определение среднего урона, наносимого каждым видом оружия на определенном расстоянии. Поскольку некоторые виды оружия делают сразу несколько выстрелов и каждый выстрел наносит определенный урон, средний урон будет равен произведению числа выстрелов на урон одного выстрела и на вероятность попадания каждой пули:
1. Выделите столбцы O:Z и скопируйте их (нажмите комбинацию Command-C или Ctrl+C на PC или выберите пункт меню Edit > Copy (Правка > Копировать)).
2. Выберите ячейку Z1 и выполните вставку (Command-V, Ctrl+V на PC или выберите пункт меню Edit > Paste (Правка > Вставить)). В результате в таблицу добавятся дополнительные столбцы AA:AK и заполнятся данными из только что скопированных столбцов.
3. Введите текст Average Damage в ячейку AA1.
4. Выберите ячейку AA3 и введите в нее формулу =IF(P3="", "", $B3*$C3*P3). Так же как в формуле для ячейки P3, функция IF гарантирует, что вычисления будут выполняться только для непустых ячеек. Формула включает абсолютные ссылки на столбцы $B и $C, потому что столбец B хранит число выстрелов, а столбец C — урон, наносимый одним выстрелом независимо от расстояния до врага. В данном случае смещаться при копировании должны только номера строк, но не столбцов (поэтому только столбцы описываются абсолютными ссылками).
5. Выберите ячейку AA3 и щелкните на самой правой кнопке в области с инстру-
ментами форматирования чисел (с надписью 123). Выберите пункт Number
(Число) в открывшемся меню.
6. Скопируйте ячейку AA3 и вставьте ее в ячейки AA3:AJ7. Теперь в них будут отображаться точные значения, но условное форматирование все еще привязано к разделу Percent Chance (Процент вероятности), из-за чего числа выше 1 вынуждают проценты в диапазоне от 0 до 100 % в разделе Percent Chance (Процент вероятности) отображаться на зеленом фоне.
7. Выберите ячейки AA3:AJ7. Если панель Conditional format rules (Правила условного
форматирования) больше не отображается, выберите в главном меню пункт Format > Conditional formatting (Формат > Условное форматирование...), чтобы вновь открыть ее.
8. С выбранными ячейками AA3:AJ7 вы должны увидеть в панели Conditional format rules (Правила условного форматирования) правило с заглавием Color scale (Градиент) и со ссылками на ячейки P3:Y7,AA3:AJ7 под ним. Щелкните на этом правиле.
9. В открывшихся настройках, в разделе Apply to range (Применить к диапазону) оставьте только P3:Y7 и щелкните на кнопке Done (Готово). В результате будет восстановлено прежнее оформление раздела Percent Chance (Процент вероятности).
10. Выберите ячейки AA3:AJ7 еще раз. В панели Conditional format rules (Правила условного форматирования) щелкните на кнопке Add new rule (Добавить правило).
11. Выберите в поле Preview (Предварительный просмотр) на вкладке Color scale (Градиент) вариант Green to yellow to red (От зеленого к красному через желтый), как прежде. Затем щелкните на кнопке Done (Готово).
В результате к разделам Percent Chance (Процент вероятности) и Average Damage (Средний урон) будут применены разные правила форматирования. Отделение правил для разных областей гарантирует их раздельное применение, что важно, потому что диапазоны чисел в разных разделах слишком отличаются друг от друга. Теперь раздел Average Damage (Средний урон) должен выглядеть так, как показано на рис. 11.15.
Вывод графиков среднего урона
Следующий важный шаг — вывод графиков среднего урона. Даже при том, что внимательное изучение цифр уже позволяет делать некоторые выводы, графики, поддерживаемые в Sheets, упростят эту работу и помогут визуально оценить происходящее. Для этого выполните следующие шаги.
1. Выберите ячейки A2:A7.
2. Прокрутите лист так, чтобы можно было видеть раздел Average Damage (Средний урон). Со все еще выделенными ячейками A2:A7 нажмите и удерживайте нажатой клавишу Command (или Ctrl на PC), нажмите левую кнопку мыши на ячейке AA2 и, удерживая нажатой клавишу и кнопку мыши, переместите указатель на ячейку AJ7, чтобы выделить область AA2:AJ7. Теперь у вас должны быть выделены две области: A2:A7 и AA2:AJ7.
3. Щелкните на кнопке диаграммы (см. рис. 11.2), чтобы открыть редактор диаграмм.
4. Щелкните на раскрывающемся списке Chart type (Тип диаграммы, в котором сейчас отображается текст «Column chart» («Столбчатая диаграмма»), см. рис. 11.6A) и выберите самый левый тип в разделе Line (Графики) — это левая верхняя пиктограмма с изображениями синей и красной ломаных линий.
5. В нижней части на вкладке DATA (ДАННЫЕ) установите флажок Switch rows / columns (Строки/столбцы).
6. Установите флажок Use column A as headers (Заголовки — значения столбца A). Убедитесь также, что установлен флажок Use row 2 as labels (Ярлыки — значения строки 2).
7. Щелкните на кнопке закрытия панели Chart editor (Редактор диаграмм), чтобы завершить создание графиков.
В результате у вас получится диаграмма как на рис. 11.16. Как видите, с оружием не все гладко. Некоторые виды, такие как снайперская винтовка (Sniper Rifle) и дробовик (Shotgun), имеют ярко выраженные отличительные черты, как мы и надеялись (дробовик обладает большой убойной силой на близких дистанциях, а снайперская
винтовка лучше подходит для поражения целей на дальних дистанциях), но среди других явно наблюдаются проблемы:
- Пулемет (Machine gun) оказался до смешного слаб.
- Пистолет (Pistol) получился, пожалуй, избыточно мощным.
- Винтовка (Rifle) также получилась слишком мощной на фоне других видов оружия.
Проще говоря, разные виды оружия плохо сбалансированы между собой.
Дублирование параметров оружия
В процессе балансировки оружия удобно иметь перед глазами информацию до и после балансировки:
1. Для начала переместите диаграмму вниз, ниже строки 16.
2. Дважды щелкните в пределах диаграммы, после чего откроется панель Chart editor (Редактор диаграмм). Выберите вкладку CUSTOMIZE (ДОПОЛНИТЕЛЬНЫЕ) в верхней части панели (рис. 11.6D). Распахните раздел Chart axis & titles (Названия диаграмм и осей, рис. 11.6E) и введите в поле Title (Название) текст Original (Исходный баланс, рис. 11.6F).
3. Теперь нужно скопировать уже добавленные данные и формулы. Выберите ячейки A1:AK8 и скопируйте их.
4. Щелкните на ячейке A9 и выполните вставку. В результате должны появиться новые ячейки A9:AK16 — полная копия всех прежде созданных данных.
5. Замените текст в ячейке A10 на Rebalanced (После балансировки). В этом наборе мы будем вносить изменения и пробовать новые значения.
6. Чтобы на основе новых данных создать диаграмму, идентичную той, что отображает исходные данные, выберите диапазоны ячеек A10:A15,AA10:AJ15, в точности как вы выбирали ячейки A2:A7,AA2:AJ7 в шагах 1 и 2 в разделе «Вывод графиков среднего урона». Следуйте дальнейшим инструкциям в том разделе и создайте вторую диаграмму, отображающую балансируемые значения.
7. Расположите новую диаграмму правее предыдущей, чтобы можно было видеть обе диаграммы и данные над ними.
8. Замените название новой диаграммы на Rebalanced (После балансировки).
Отображение общего урона
Добавим еще одну статистику, которую тоже полезно видеть, — общий урон. Это сумма среднего урона, наносимого оружием во всех диапазонах, которая позволит вам получить представление об общей мощности оружия. Для этого можно воспользоваться трюком, который я часто использую для создания простых гистограмм внутри ячеек в электронной таблице (то есть не в виде отдельных диаграмм). Результат показан на рис. 11.17.
1. Щелкните правой кнопкой мыши на заголовке столбца AK и в открывшемся меню выберите пункт Insert 1 right (Вставить справа: 1).
2. Щелкните правой кнопкой мыши на заголовке столбца B и выберите пункт Copy (Копировать). В результате в буфер обмена будет скопирован весь столбец B.
3. Щелкните правой кнопкой мыши на заголовке столбца AL и выберите пункт Paste (Вставить). В результате в столбец AL будет вставлено содержимое столбца B, включая оформление фона и шрифта.
4. Щелкните правой кнопкой мыши на заголовке столбца AL и выберите пункт Insert 1 right (Вставить справа: 1).
5.Введите в ячейки AL1 и AL9 текст Overall Damage (Общий урон).
6. Выберите ячейку AL3 и введите формулу =SUM(AA3:AJ3). Она вычисляет средний урон, наносимый пистолетом во всех диапазонах (он должен быть равен 45.33).
7. Чтобы выполнить трюк с гистограммой, нужно преобразовать это вещественное число в целое, то есть результат функции SUM требуется округлить. Замените формулу в AL3 на: =ROUND( SUM(AA3:AJ3) ). Теперь в ячейке должно отобразиться число 45.00. Чтобы удалить лишние нули, выберите ячейку AL3 и щелкните на кнопке удаления десятичных знаков, как вы уже делали это прежде (третья кнопка в инструментах форматирования чисел).
8. Выберите ячейку AM3 и введите формулу =REPT("|", AL3). Функция REPT повторяет текст в первом аргументе заданное число раз во втором аргументе. Текстом в данном случае служит символ вертикальной черты (чтобы ввести его, нужно нажать клавишу Shift и, удерживая ее, нажать клавишу с обратным слешем (\), которая на большинстве клавиатур находится над клавишей Return/Enter), и он будет повторен 45 раз, потому что ячейка AL3 содержит значение 45. В ячейке AM3 появится небольшая колонка, простирающаяся вправо. Щелкните дважды на правой границе в заголовке столбца AM, чтобы раскрыть его до требуемой ширины.
9. Выберите ячейки AL3:AM3 и скопируйте их. Вставьте содержимое буфера обмена в ячейки AL3:AM7 и AL11:AM15. Теперь у вас перед глазами будет текстовая гистограмма, отображающая общий урон всех видов оружия, исходный и после балансировки. Наконец, снова отрегулируйте ширину столбца AM, чтобы видеть все символы вертикальной черты.
Балансировка оружия
Теперь у нас есть два набора данных и две диаграммы, и можно пробовать балансировать оружие. Как увеличить мощность пулемета? Что следует увеличить — количество выстрелов, вероятность попадания в цель или убойную силу одного выстрела? При балансировке следует учитывать некоторые дополнительные правила игры.
- В этом примере игры персонажи имеют только 6 единиц здоровья, поэтому они теряют сознание при нанесении им урона, равного 6 единицам.
- В Valkyria Chronicles, если враг не был убит атакующим солдатом, он автоматически переходит в контратаку. Поэтому нанесение урона в 6 единиц предпочтительнее, чем нанесение урона в 5 единиц, так как это также защищает атакующего от контратаки.
- Оружие с большим количеством выстрелов (например, пулемет) дает более высокую вероятность нанести средний урон за один ход, тогда как оружие с единственным выстрелом (например, дробовик и снайперская винтовка) кажется менее надежным. На рис. 11.7 показано, как распределение вероятности все больше смещается к среднему с увеличением числа кубиков, бросаемых, чтобы определить вероятность поражения цели несколькими выстрелами.
- Даже с учетом всей имеющейся информации эта диаграмма не отражает некоторых аспектов баланса оружия, в том числе замечание о более высокой вероятности нанести средний урон, сделанное выше, в отношении оружия с несколькими выстрелами, а также преимущество снайперской винтовки для поражения врагов, находящихся слишком далеко для эффективной контратаки.
Попробуйте сами сбалансировать эти параметры оружия, изменяя только значения в ячейках B11:N15. Не трогайте исходные параметры и ничего не меняйте в разделах Percent Chance (Процент вероятности) и Average Damage (Средний урон); они оба, так же как диаграмма Rebalanced (После балансировки), будут обновляться автоматически и отражать изменения, произведенные вами в ячейках Shots (Выстрелов), D/Shot (Урон/Выстрел) и ToHit (Для попадания). Поиграв с числами, продолжайте чтение.
Один пример сбалансированных значений
На рис. 11.17 можно видеть параметры оружия, которые я подобрал для спроектированного прототипа. Конечно, это не единственный способ балансировки оружия, и даже не самый лучший, но он позволяет достичь многих целей дизайна.
- Каждое оружие имеет свои отличительные характеристики, и никакое из них не является избыточно или недостаточно мощным.
- Даже при том, что на этой диаграмме дробовик (Shotgun) может показаться очень похожим на пулемет (Machine gun), эти два вида оружия существенно отличаются двумя факторами: 1) попадание с 6-очковым уроном из дробовика немедленно выводит противника из строя; и 2) пулемет выпускает множество пуль, поэтому он будет наносить средний урон гораздо чаще.
- Пистолет имеет приличные характеристики для близкого расстояния и более универсальный, чем дробовик или пулемет благодаря его способности поражать врагов на более длинных дистанциях.
- Винтовка (Rifle) по-настоящему блистает на средних дистанциях.
- Снайперская винтовка (Sniper rifle) никуда не годится на близком расстоянии, но является лучшим оружием на дальней дистанции. Попадание из снайперской винтовки наносит урон в 6 очков подобно дробовику, то есть она так же способна уничтожить врага одним выстрелом.
Несмотря на то что такая балансировка с применением электронной таблицы не охватывает всех возможных последствий дизайна оружия, она все еще остается важным инструментом в арсенале дизайнера, потому что помогает быстро проанализировать большие объемы данных. Некоторые дизайнеры бесплатных игр большую часть своего времени проводят за корректировкой данных в электронных таблицах, стараясь сделать свои игры чуть более сбалансированными, поэтому если вы собираетесь работать в сфере дизайна игр, владение электронными таблицами и проектированием на основе данных (что мы только что сделали) вам очень пригодится.
Положительная и отрицательная обратная связь
Одним из последних ключевых элементов поддержки баланса игры, который мы обсудим, является понятие положительной и отрицательной обратной связи. В игре с положительной обратной связью игрок, захвативший лидерство с самого начала, получает дополнительное преимущество и, скорее всего, победит. В игре с отрицательной обратной связью преимущество получают проигрывающие игроки.
Покер — отличный пример игры с положительной обратной связью. Если игрок выигрывает большой банк и денег у него больше, чем у других игроков, отдельные ставки значат для него меньше и у него больше свободы делать такие шаги, как блеф (потому что он может позволить себе потерять что-то). Напротив, у игрока, потерявшего деньги в начале игры, меньше свободы действий и нет возможности рисковать. Сильная положительная обратная связь есть в игре Monopoly, где игрок, обладающий лучшими объектами, постоянно получает больше денег и способен заставить других игроков продавать свои объекты, если они оказываются не в состоянии платить арендную плату, когда попадают на свои участки. Для большинства игр положительная обратная связь — нежелательное явление, но она хорошо подходит для случаев, когда требуется, чтобы игра завершалась быстро (хотя в Monopoly это преимущество не используется, потому что дизайнер этой игры хотел показать несчастья бедных в капиталистическом обществе). В играх с одним игроком также часто есть механизмы положительной обратной связи, цель которых — дать игроку почувствовать себя всесильным в игре.
Mario Kart — прекрасный пример игры с отрицательной обратной связью в форме случайных предметов, присуждаемых игроку, когда тот наезжает на коробки. Обычно игрок получает банан (по сути, оружие защиты), связку из трех бананов или зеленую ракушку (один из самых слабых видов оружия). Игрок на последнем месте часто получает более мощные предметы, такие как молния, которая замедляет всех других игроков, участвующих в гонке. Отрицательная обратная связь делает игры более справедливыми по отношению к игрокам, не сумевшим пробиться в лидеры, и более длинными, а также дает всем игрокам возможность почувствовать, что у них все еще есть шанс выиграть, даже если они сильно отстают.
Итоги
В этой главе было много математики, но, я надеюсь, вы убедились, что знание ее очень пригодится вам как дизайнеру игр. Большинство тем, затронутых в этой главе, заслуживают отдельной книги, поэтому я призываю продолжить их изучение, если они вам интересны.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 20% по купону — Unity
По факту оплаты бумажной версии книги на e-mail высылается электронная версия книги.