О чем не стоит забывать чтобы в игру было комфортно играть

Я переиграл уже во множество маленьких игр начинающих авторов, в т. ч. сделанных на конкурс. И замечаю одни те же ошибки со стороны игрока, со стороны управления, обучения и оформления игры. Может вы прочтете здесь совершенно очевидные для вас вещи, но я часто встречаю что начинающие авторы про них забывают.
Так что, новичок! Если ты сделал свою первую (2, 3) игру — прочитай эту статью, может перед публикацией игры ты о чем-то забыл?
Высказывайтесь, критикуйте, буду добавлять в статью ваши замечания если я ошибся, сам о чем забыл или не знаю.

Warning! Много текста без картинок.

Опыт пользователя (UX)

UX — это все, что дает игроку удобство.
При разработке игры от 10% до 50% времени может уйти не на саму разработку игры, а только на то, чтобы игроку было удобно в нее играть (пользовательское оформление).
Когда вы что-то придумали или начали делать — сразу прикиньте, а будет ли это удобно для игрока? Подумайте как такие же вещи делаются в других играх и постарайтесь выбрать самый удобный вариант.

По своему опыту могу привести следующие (наверняка многим очевидные) правила, которым, тем не менее многие авторы игр просто ленятся следовать.

* Обращайте внимание на опыт других похожих игр, в которые вам удобно играть
За несколько десятков лет разработчики в каждом жанре методом проб и ошибок нашли наиболее подходящие и удобные для игроков интерфейс, управление и механики в играх. Множество игроков уже играли в эти игры и у них выработался шаблон и привычки. Игрокам будет непривычно если в ваше игре вы все сделаете совершенно наоборот.

* Часто совершаемые действия должны выполняться максимально удобно и с минимумом движений
Именно поэтому перемещение в шутерах вешают на WASD, а прицеливание — на мышь.
Например, самое частовыполняемое действие вешается на Левую кнопку мыши, а не на Правую, потому что на ЛКМ удобнее нажимать. Исключение — стратегии, в которых ПКМ используется чаще чем ЛКМ.

* Композиция — самое важное в игре должно находиться в центре экрана
Именно поэтому прицел в шутерах и наш персонаж в платформерах всегда рисуется в центре экрана, а не с краю.
Также постарайтесь чтобы игроку не пришлось постоянно бегать глазами по всему экрану в поисках своего персонажа, врагов и шкалы здоровья.
Если у вас в игре много текста, то выводите его все время где-то в одном месте, чтобы игроку не приходилось постоянно бегать глазами по экрану.

* Текст должен контрастировать с задним фоном
Самый частый вариант — это черные буквы на белом фоне или белые буквы на черном фоне. Просто потому что их лучше видно. Не стоит делать светлые буквы на светлом фоне.
Если цвет фона не равномерный и все время меняется, то лучше использовать буквы в обводкой (например белые буквы с черной обводкой или наоборот), чтобы быть точно увереным что эти буквы будут читаемы на любом фоне. Или выводить текст на фоне черного или белого прямоугольника вверху или внизу окна, который при этом не загораживает собой остальную игру.

*Частоповторяемые одинаковые звуки — плохо
Если у вас часто совершается какое-то действие (например, подбирание монетки), то для него лучше вообще выбрать звук максимально приятный для слуха. Если звук будет неприятным и часто повторяться — он будет только раздражать игрока.
Также желательно сделать несколько звуков, выбираемых перед воспроизведением случайным образом. Или, если у вас только один звук — менять его частоту (pitch) в пределах 90−110% перед каждым восроизведением.

* Любое событие, приводящее к важным изменениям в игре, должно сопровождаться анимацией и/или звуком
Игрок принимает информацию от игры только в виде картинки и звука. Если на экране ничего не изменилось и звук не меняется, то игрок никак не узнает что произошло что-то важное.


Геймплейный UX

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

* Время койота
Это дополнительное время, когда персонаж уже начал падать в пропасть, но ему все еще разрешается нажать кнопку прыжка.
Обычно это 0.1−0.2 секунды. Вы этого не замечаете, но без такой хитрости вы будете очень часто падать в пропасть, прыгая с края платформы, и при этом говорить «я же нажал кнопку прыжка, почему он не прыгнул?!».
Это связано с инерцией нашего мозга — время койота компенсирует задержку игрока между моментом когда пора прыгать и нажатием на кнопку прыжка.

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

* Большая пуля — для врагов, маленькая — для стен
Визуально выстрел выглядит одинаково. Но вот коллайдеры — разные.
Когда мы стреляем в шутере — при обнаружении столкновений с врагами у пули используется коллайдер побольше, а при обнаружении столкновений со стенами — коллайдер почти нулевого размера.
Это позволяет легче попадать во врагов (особенно на бегу), не целясь в них с ювелирной точностью и упрощает стрельбу из-за стены и укрытий.
В то же время коллайдер у выстрелов (или ударов) врагов делают меньше — чтобы от них было проще уворачиваться.

* Последняя кровинка
Когда у игрока совсем закончилось здоровье — есть шанс что 1 или несколько следующих пропущенных ударов не нанесут урон здоровью (хотя эффект получения урона будет).
Или же игра показывает на экране наше здоровье не целиком, а только 100% из 105%.
Это создает приятное ощущение что мы спаслись/выжили в самый последний момент.

* Замедленный таймер
Та же песня из предыдущей оперы. Когда остается мало времени — таймер начинает отсчитывать его немного медленее, чем есть на самом деле.

* Поддавки
Во многих играх противники специально играют так, чтобы игроку было интересно, но он не проиграл.
Например, в гонках остающие от игрока машины начинают ехать быстрее, а обгоняющие его — наоборот, медленнее.

* Периодические подсказки
В головоломках, если игрок тупит, тормозит или не понимает как пройти пазл (то есть прошло сколько-то времени с начала пазла), то игра начинает ему давать подсказки. Лучше всего сообщать игроку что для него есть новая подсказка по прохождению, но выводить ее на экран если игрок ее откроет.

Что обязательно должно быть в вашей игре (проверьте это перед релизом)

* Выход из игры
Если у вас не WEB-игра, то нужно предусмотреть выход из нее (из WEB-игры можно «выйти» просто закрыв вкладку браузера). Никому не захочется закрывать вашу игру через диспетчер задач.
Для коротких и маленьких игр делайте выход из игры по одной кнопке — по нажатию мышью на «Крестик» окна (в оконном режиме) и кнопку Escape. Но при этом на кнопку выхода не должно быть назначено никаких других действий, чтобы игрок случайно не вышел из игры.
Для игр дольше 10 минут лучше при нажатии на Escape ставить игру на паузу, а выходить только при подтверждении (например, Y или N, или Пробел — выход из игры, еще раз Escape — вернуться в игру).
Из большинства игр можно принудительно выйти нажатием Alt+F4. Если с вашей игрой это не работает — добавьте эту комбинацию сами.

* Информация об управлении прямо в игре
Игрок, запустивший вашу игру — ничего о ней не знает.
Предполагайте что он не читал readme.txt или описание вашей игры — игроки не любят вообще что-то читать перед самой игрой.
Первое что игрок должен узнать после запуска — управление.
В играх есть 3 привычных игрокам типов управления:
1) мышь, WASD, пробел, E, Q, F, цифры 1−0 — для 3D-шутеров
2) стрелки и Z, X — для 2D-платформеров
3) ЛМК — выбор/перемещение, ПКМ — действие/взаимодействие — для квестов
Большинство опытных игроков знает об этом.

А вот если ваше управление хотя бы чуть-чуть от этого отличается — то о нем обязательно надо сообщить в самом начале, как только начинается геймплей.
Несколько советов:
* Если мышь в вашей игре вообще не используется — просто отключите отображение курсора, чтобы игрок понял что мышь никак не используется.
* Если управление у вас не 3−4 кнопки, то не вываливайте на игрока все управление сразу — он не запомнит.

Лучше всего сообщать новую кнопку тогда, когда игрок впервые сталкивается с ситуацией где ее придется применить.
В крайнем случае сделаете справку обо всех кнопках управлении в игре, которую можно вызывать в любой момент (если игрок что-то забыл). Например по нажатию на F1 или кнопки H и поместите надпись об этом на экран, которая пропадает после первого же нажатия.
Или сделайте справку об управлении отдельным пунктом в меню, если у вас есть меню в паузе.
Если управление в ваше игре непростое, то лучше всего — контекстное обучение управлению, по типу туториала или обучающей миссии.

* Пауза
Игрок может банально захотеть в туалет или его отвлекут во время игры.
Чтобы он не проиграл пока отлучился — нужно сделать в игре паузу с остановкой обновления мира.
Паузу лучше сделать по кнопке Escape или Enter.
И обязательно писать на экране что сейчас ПАУЗА (чтобы игрок не подумал что игра зависла) или затенять экран.
Также нужно добавить остановку игры при потере фокуса окна (некоторые движки это делают автоматически), если только у вас не мультиплеерная игра.

* Оконный и полноэкранный режим
Большинству игроков удобнее играть на полный экран. Причина проста — у игроков разный размер монитора и разрешение экрана.
Если в окне у вас игра выглядит нормально, то у одних игроков окно может быть слишком мелким, а у других — оно даже не будет помещаться на рабочем столе.
А вот стримерам оконный режим — просто необходим, поскольку параллельно с игрой им надо:
1) Следить за временем
2) Читать чат
3) Где-то картинку с веб-камеры вставить (желательно так, чтобы она не загораживала саму игру и была видна самому стримеру)
Играя на полный экран, им бы пришлось постоянно сворачивать и разворачивать игру, что неудобно.
Поэтому в игре должно присутствовать хотя бы переключение между оконным и полноэкранным режимами.
Поскольку соотношение сторон монитора у всех разное — в полноэкранном режиме предусмотрите правильное масштабирование игры с формированием черных полос снизу-сверху или по бокам, чтобы картинка не стала растянутой или приплюснутой.

* Сохранения
Если ваша игра проходится дольше 20-ти минут, то это значит что кто-то не сможет ее пройти за 1 присест.
Также если ваша игра НЕ является полностью линейной, и в ней есть несколько концовок или способов прохождения, то игроку захочется их все попробовать.
В таких случаях делайте в игре сохранения (элемент, позволяющий продолжить игру не с самого начала).
В крайнем случае при старте игры сделайте возможность выбрать любой уровень.
Не делайте в игре пароли — игроки не любят запоминать информацию, которую за них должен запомнить компьютер. Поэтому все сохранения — сохраняйте на диск.
В игре можно сделать пароли, в качестве бонуса, только когда в игре уже есть нормальные сохранения.

* Чувствительность мыши (для 3D-игр)
Если вы делаете 3D-игру или не используете системный курсор (то есть напрямую опрашиваете движения мыши, а не координаты курсора), то вы обязаны делать подстройку чувствительности мыши.
Тут опять все упирается в разные мониторы. Скорость перемещения курсора в системе задается в пикселях, а юзеру важна скорость перемещения в дюймах.
Соответственно на больших мониторах чувствительность мыши будет больше, чем на маленьких.
В итоге прицел в вашей игре у одних будет двигаться слишком быстро, у других — слишком медленно. Да и у каждого игрока свои предпочтения — кто-то любит чтобы прицел в шутерах двигался по-быстрее, а кому-то лучше помедленее.
Решение — добавить множитель перемещения мыши.
Для небольших игр сообщение о подстройке мыши лучше добавить в начале игры и дать возможность менять чувствительность кнопками с клавиатуры прямо во время игры (при этом показывать игроку картинку, поясняющую на сколько изменилась чувствительность мыши).
Для больших игр этот параметр нужно выносить в настройки.

* Для шутеров: Раздельная чувствительность мыши по горизонтали и вертикали, инверсия по оси Y
В шутерах намного чаще приходится стрелять по горизонтали, на одном уровне с игроком, чем куда-то вверх или вниз. Кроме того, перемещение мыши влево-вправо используется для поворота в стороны.
Поэтому вертикальная чувствительность мыши в игре должна быть в ~1,5−2 раза меньше, чем горизонтальная, чтобы при неточных движениях мыши прицел не уезжал сильно вверх-вниз.
Также одним игрокам удобнее играть когда при движении мыши на себя прицел движется вниз, а другим — вверх. Поэтому надо сделать опцию переключения инверсии одной кнопкой (например Y).

* Яркость
Если у вас достаточно темная игра (хоррор или просто в ней много темного), то добавьте регулировку яркости.
У игроков разные мониторы — одни могут хорошо передавать градации черного, другие — плохо. И потом, восприятие картинки будет зависеть от времени суток и внешнего освещения в комнате игрока — в темные игры лучше играть вечером или ночью. В конце концов, у кого-то может быть просто плохое зрение или не хочется напрягать глаза.
Подстройку яркости следует делать сразу после запуска игры. Просите игрока настроить яркость так, чтобы одна из 2−3 показываемых картинок была плохо различима (лучше всего горизонтальным ползунком или кнопками со стрелками).


Что желательно добавить в игру

* Изменение размеров окна
Большинство игроков любит играть на весь экран. Но некоторым больше нравится в окошке. Особенно если в вашей игре низкое разрешение графики, то в нее комфортнее будет играть в небольшом окне, чем на весь экран на большом мониторе.
Добавьте в игру хотя бы изменение масштаба окна в x1, x1.5, x2, x3, x4 раза и т. д.
Идеальным случаем будет если игрок сможет потянуть курсором за угол окна и задать ему любой желаемый размер.

* Вкл/откл. и изменение громкости звуков и музыки
Это, как и с размером окна, больше завязано на предпочтениях игрока:
— Игрок может захотеть сделать звуки по-тише, а музыку — погромче. Или наоборот.
— Если музыка в вашей игре не очень приятная или даже заунывная, то через 10 минут у игрока может возникнуть желание ее отключить, оставив при этом звуки.
— Вам при записи трейлера или геймплея может понадобится отключить отдельно игровую музыку, звуки или весь звук вообще.
В некоторых игровых конструкторах часть этого функционала уже реализована. Если нет — сделайте ее сами.

* Поддержка геймпада
У всех на ПК есть клавиатура и мышь.
Геймпад есть не у всех, но во многие игры (в основном платформеры) удобнее играть именно на нем.
Особенно это касается игры вдвоем на одном ПК (например, файтинги, гонки или платформеры с совместным прохождением) — двоим на одной клавиатуре играть не очень удобно (кроме того некоторые одновременные нажатия клавиш будут блокироваться самой клавиатурой). В таких случаях кто-то должен играть на клавиатуре, а кто-то — на геймпаде. А иногда — ОБА на геймпаде.
Если добавляете в игру поддержку геймпада, то не забудьте продублировать справку об управлении еще и для его кнопок.
Разумеется, глупо делать поддержку геймпада в одиночных играх, где мышь+клавиатура справятся намного лучше (например, в стратегиях или шутерах).

* Перенастройка управления
Если у вас задействовано много кнопок или сложное навороченное управление, то:
— есть шанс что кому-то не понравится как вы их расположили
— у кого-то может не работать или залипать важная кнопка
— а может быть просто раскладка не QWERTY и все ваши кнопки окажутся в неудобных местах
В таких случаях игроку потребуется возможность перенастроить управление в настройках игры, с сохранением в файл.
Но данная вещь необязательна, поскольку необходимость изменить управление в игре у игроков появляется редко и, в основном, в больших играх.

* Ссылки на другие ваши проекты, сайт или страничку в интернете
Если игроку ваша игра понравилась, то он может заинтересоваться — а какие игры у вас еще есть.
Конечно, он все это сможет сам нагуглить, если захочет, но лучше если эти ссылки будут прямо в игре, не отходя от кассы, пока у игрока не пропало желание ознакомиться с другими вашими играми.
Ссылки лучше показывать после прохождения игры, в главном меню (куда возвращается игра после прохождения), или в меню паузы.
Ссылки должны быть кликабельными (чтобы сразу открывался сайт), а не просто текст ссылки.