Порой кажется, что разработать игры без дверей намного легче, чем с ними. На самом деле существует множество игровых механик, которые очень сложно реализовать – иногда они доводят разработчиков до истерики! Совместно со специалистами Skill Games мы постарались разобрать такие ключевые механики, чтобы они не вызывали у вас проблем. Двери в трехмерной игре – это настоящие издевательство над командой, хотя казалось бы, что может быть проще их создания? Но в дверных проемах кроется огромное количество неожиданностей при их максимально простом строении. Существует дверной проем, сама дверь, дверная ручка: такая система есть в каждом доме, поэтому подробно объяснять, как она устроена, не имеет смысла. Когда дело касается разработки игры, совершенно неожиданно выясняется, что повторить все то же самое в виртуальном мире достаточно тяжело.
Сегодня мы хотим разобраться: почему создание такого с одной стороны простого элемента может растянуться на долгие дни работы над кодом и дальнейшего тестирования. Обратите внимание, в тексте мы говорим про распашные двери, а не про те, которые можно сдвинуть в пол или потолок – с ними как раз таки проблем почти не возникает.
Что не так с дверьми?
Первоначально нужно четко понимать, что в трехмерной игре не действуют законы физики. Все объекты, которые вы видите в игровом пространстве, не обладают границами, сквозь них можно легко пройти – это значительно усложняет обозначение их при помощи специального хитбокса. Что может произойти если во время открывания двери на ее пути окажется персонаж? Гипотетически, когда герой ударяется о дверь, она должна либо просто остановиться, либо отскочить немного назад. Такое поведение рассчитывается на уровне кода. Дверь должна максимально правдоподобно обрабатывать свои физические качества, либо разработчикам необходимо как-то по-другому решить данный вопрос – но решить его нужно обязательно. Проблемы с дверьми отлично показаны в игровом проекте Half-Life. Для каждой двери подключен параметр Blocking Damage, что иллюстрируется в некоторых ситуациях тем, что дверь может убить Фримена. Пусть и в шуточной форме, но проект объясняет, почему создание такого простого объекта требует усилий несколько десятков разработчиков, от программиста, который занимается искусственным интеллектом, до дизайнера интерфейса и художника. На самом деле проблемы с дверьми — это классические проблемы всех дизайнеров, кому-то нужно их решить и почти всегда это оказывается специалист по визуалу.
Мы рассмотрим лишь несколько актуальных вопросов, на которые необходимо ответить геймдизайнеру: откуда появляются враги и почему они должны выбегать именно из этой двери и как после этого процесса должны двери запираться? Как игрок открывает дверь: достаточно ли ему просто подойти к ней или она автоматически передвигается в сторону, распахивается самостоятельно? Необходимо ли игроку нажать на кнопку, чтобы дверь открылась и закрылась за ним? Авторы разных игровых проектов отвечают на эти вопросы совершенно индивидуально, иногда разработчики вообще предпочитают не делать никакие двери, потому что решают, что это самый простой выход из ситуации. Например, в проекте «Мор. Утопия» в домах вообще невозможно встретить ни одной межкомнатной двери, входные двери становятся лишь определенным триггером, который при нажатии кнопки загружает нужную локацию для пользователя. В ролевой игре Elex дверей нет вообще, за исключением только тех, которые необходимы для выстраивания правильного сюжета. Даже в тюремной клетке, где сидит персонаж - дверей тоже нет, можно просто встать и идти куда вздумается. По нашему мнению, отказ от двери — это больше радикальное решение, чем рациональное. Чаще всего специалисты пытаются подобрать наиболее щадящий для себя способ взаимодействия с ними.
Все дело состоит в том, что когда дверь открывается на игрока, то ему нужно намного больше свободного пространства в комнате. Это необходимо для того, чтобы игрок имел возможность отойти назад: что может случиться в том случае если он не отойдет? Дверь может просто не открыться, либо подвинуть персонажа в другое место, в котором он на этот момент не должен находиться, либо она пройдет сквозь него или вообще ударит героя. На самом деле здесь огромное количество вариантов развития событий, которые определяют разработчики. Если специалисты выбирают то, чтобы дверь должна открываться на себя, то им необходимо внедрить дополнительную анимацию и замедлить пользователя. Сквозь дверь невозможно пробежать, если пользователь спасается от врага – именно поэтому в реалистичных играх двери делают крайне нереалистичными, например открывают их в обе стороны. Разработать правильно работающую дверь очень сложно – это на самом деле самый сложный элемент в игровом проекте, в котором всегда есть какие-то ошибки. В большинстве видеоигр двери при открытии немного съезжаются в сторону, как в пустоту, при этом открываясь странным образом, не позволяя взаимодействовать с ними. Проблему может решить только таким образом: чтобы дверь открывалась в обе стороны, но в реальной жизни так не бывает.
Давайте представим две ситуации, которые часто встречаются в нашей жизни. Во время первой ситуации вы резко распахивайте двери, они ударяются об стену и снова закрываются. Во время второй ситуации вы толкаете сильно дверь шкафа, чтобы ее закрыть: она сильно ударяется и снова распахивается. Что-то похожее происходит с дверьми в проекте Penumbra. Из-за чего спастись бегством от противника главному герою было достаточно сложно. Когда на определенной локации ставят дом, двери при этом автоматически не прилагается к нему. Разработчики их ставят отдельно, например: когда вы играете в проект «Ведьмак 3» то помните, что каждая дверь там была настроена специалистами вручную. После этого всей команде пришлось также вручную проверить их установку. Проблема заключалась в сцене со штурмом замка: команда, которая работала над ней, не хотела, чтобы пользователи отвлекались на двери, поэтому она запретила главному герою входить в них. Разработчики сделали так: на время прохождения сцены все двери мира были заперты, когда сцена заканчивалась они автоматически отпирались. В игровом проекте непонятно какая дверь изначально была заперта и должна оставаться в этом положении дальше. Поэтому все двери без разбора стали то открываться, то закрываться. Решение этой проблемы было довольно сложным – дизайнерам пришлось пройти все двери в проекте вручную и расставить специальный тег.
Дверные проемы в виртуальной реальности
Правильно реализовать механику открывания двери очень сложно, особенно это касается проектов, созданных для виртуальной реальности. Например, возьмем Half-Life: Alyx в котором для того, чтобы открыть дверь, необходимо взяться сначала за ручку, повернуть ее и только после этого потянуть на себя. Первая проблема, с которой сталкиваются разработчики – это то, что во время теста пользователи просто не могут открыть самостоятельно дверь. Первоначально она открывалась только в одну сторону, но понять в какую именно было безумно тяжело. По умолчанию в виртуальной реальности рука находится в той же позиции, в которой она находилась бы в реальной жизни. На самом деле виртуальная рука может немного отличаться от позиции реальной руки, причем делать это на значительное расстояние, прежде чем игрок начнет понимать, что что-то здесь не так. Скорее всего это связано с тем, что пользователи понятия не имеют, в каком месте в реальности должны находиться их руки – они уверены, что это то же самое место что и в виртуальном мире.
Давайте представим ситуацию: есть дверь – которую необходимо открыть движением на себя, если игрок пытается открыть ее от себя, то он делает движение своей рукой вперед – дверь при этом не открывается, а игрок сразу же понимает, что открывать ее необходимо в другую сторону. Делает движение назад и при этом дверь опять не открывается: игрок думает, что она просто заперта и при этом идет дальше. Почему это происходит? В этой ситуации, когда игрок сначала пытается толкнуть дверь, а она ему не поддается, то реальная и виртуальная рука оказываются на значительном расстоянии друг от друга. Виртуальная остается все еще на дверной ручке, реальная при этом опираются на другую сторону двери. Реальной руки надо сначала вернуться в позицию виртуальной, а уже потом вместе с ней начать передвигаться назад – чтобы открыть необходимую дверь. Игрок изначально этого не понимает, так как виртуальная рука находится там, где она по сути своей должна быть. Он думает, что все что нужно сделать для открытия двери – это немного потянуть ее на себя, но на самом деле, так как его рука находится за дверью – этого движения уже не достаточно для того чтобы открыть дверь.
Чтобы решить такую проблему можно использовать визуальные подсказки, которые намекают куда необходимо распахнуть дверь. Например, одна из визуальных подсказок в проекте Half-Life: Alyx это то, что дверь уже приоткрыта в необходимую сторону, благодаря чему игрок сразу понимает необходимо ли ее толкнуть или можно просто потянуть. Если вы хотите в своем проекте обойтись без подсказок, тогда двери нужно просто позволить открываться в обе стороны. Скорее всего игроки сделают именно так как им удобно и даже не поймут при этом что по-другому работать тоже возможно. Также стоит добавить, что в наборе Half-Life: Alyx Workshop Tools есть параметр Open Direction, который определяет, будет ли дверь открываться в обе стороны или только вперед-назад. Разработчики всегда рекомендуют для должного уровня реализма делать двери, которые открываются в обе стороны. Например, в проекте Half-Life: Alyx все двери оборудованы нажимной ручкой – ее анимация полностью синхронизируется с ладонью персонажа. То есть при повороте на 90° замок открывается, все совершается, как и в реальности: с одной стороны, даже механику можно не объяснять, ведь все знают, как на самом деле работает дверная ручка, но не все так просто.
Во время тестирования игроки начинают хвататься за ручку и при этом они ее сразу не поворачивают, а просто пытаются открыть дверь. Разработчикам нельзя ожидать, что игроки будут использовать свой реальный опыт виртуальной реальности. Пользователи с большим опытом прекрасно понимают, что технологии еще не достигли того уровня, когда мы можем имитировать реальный мир при виртуальном пространстве. У опытных игроков поэтому нет ожиданий по данному поводу, потому что они ничего не пробуют и не могут при этом продвинуться вперед. Выход, который нашли многие разработчики – это показать, как работает ключевая механика. Игрок хватается за дверную ручку, сразу запускается небольшая анимация, которая мгновенно поворачивает ее вниз. Игроки в этот момент точно уверены, что самостоятельно делают движение открывающие дверь и при этом понимают, как надо действовать - решение этого вопроса при помощи рассмотренного способа все равно не избавляет разработчиков виртуальных игр от проблем с дверьми. Ведь необходимо еще решить, когда дверь можно считать открытой, чтобы игрок мог в нее пройти. Также нужно продумать будет ли дверь открываться в обе стороны - вопросов на самом деле очень много и на них все придется отвечать вашему геймдизайнеру.