ФЭНДОМ


25px-logo
25px-logo
Это — дословный перевод блога на русском языке.
Оригинал этого блога на английском можно прочесть здесь.
О блогах разработки читайте в этой статье.

Дата выхода данного блога: 3 марта 2019 г.

Добро пожаловать на первый официальный блог разработки SCP: Containment Breach — Unity Edition!



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

Сегодня мы поговорим о некоторых изменениях в коде игры, а также в целом о ближайших планах развития SCP: Unity!

Обновлённая система интеракции

Проблема

На момент обновления Alpha 0.6, стало ясно, что наша текущая система интеракции недостаточно широко развита, чтобы управиться со всеми вариантами взаимодействий с игровым миром, которые мы планируем добавить в игру.
К примеру, изображение сбоку показывает, что, при попытке нацелиться на ту или иную кнопку лифта, крайне затруднительно выбрать именно ту кнопку, на которую вы указываете, поскольку система считает иначе…

Происходит это потому, что старая система попросту выбирает наиболее подходящий объект интеракции по критерию наибольшей близости к курсору, а не тот объект, на который непосредственно смотрит игрок. Это было сделано для того, чтобы игрок мог закрывать двери, не смотря прямо на них, в связи с SCP-173. Однако, оказалось, что такая система нам совершенно не подходит по показанным выше причинам.

Итак, мы не можем просто взять и изменить текущую систему в нашу пользу, поскольку это приведёт к серьёзным проблемам с SCP-173 (представьте, что SCP-173 находится с вами в помещении, а вам необходимо обернуться, чтобы открыть или закрыть дверь). К тому же, во время игры в Apex Legends, я (Zornor90) заметил, что эта игра имеет весьма маленький радиус буфера, когда игрок смотрит в основном направлении предмета, что позволяет ему подбирать предмет, не смотря прямо на него.

Решение

Решением имеющейся проблемы стало сперва отделить скрипт обнаружения цели из InteractionHandler в отдельный элемент — TargetFinder! Данная система отвечает лишь за обнаружение объектов интеракции. Объекты интеракции выбираются по следующим приоритетам:

  • Прямая (непосредственная) цель — игрок смотрит/наводит курсор прямо на неё;
  • Непрямая (посредственная) цель — игрок смотрит/наводит курсор на близкое к ней расстояние;
  • Ближайшая в диапазоне цель — для дверных кнопок и прочих объектов, с которыми можно взаимодействовать с любого ракурса.

Это означает, что теперь Вы сможете взаимодействовать с прямой (непосредственной) целью интеракции, и одновременно закрывать дверь, не опасаясь, что SCP-173 вас прикончит. И наконец, по умолчанию каждый объект интеракции является непосредственным — только дверные кнопки и прочие подобные объекты будут по-прежнему использовать свойства старой системы. Этот шаг позволил нам догнать большинство сегодняшних игр в плане взаимодействия с окружающим игровым миром, а также избежать банальных проблем, когда игрок долгое время пытается подобрать предмет на полу, но вместо этого жмёт на кнопку двери.

Централизация базы данных ассетов игры

SCP: Unity использует базы данных для большинства наших внутриигровых ассетов (предметы, помещения и т.д). Когда я (Zornor90) только начал кодинг игры, я не особо хорошо разбирался в практике программирования на движке Unity. И до определённого момента, все ассеты в игре загружались одновременно и по всей карте! Это затрудняет новичкам-программистам работу и понимание того, что где расположено.

К примеру, вот как выглядел список платных подписчиков игры на Patreon раньше:


List<Patron> types = (UnityEditor.AssetDatabase.LoadAssetAtPath(EditorDBPaths.PatreonDatabase, typeof(PatronDatabase)) as PatronDatabase).patrons;


Мало того, что это действительно ужасно ввиду того, что данный код использует прямой путь для перехода на веб-ресурс (в отдельном файле), это также означает, что нам был необходим отдельный код для загрузки и запуска предварительных сборок (Dev-версий) игры. Кроме того, все ссылки на эту базу данных необходимо было загружать по отдельности!

Решение

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

Blog1

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

Прочие новости

Среди многих других новостей, о которых мы поговорим позже, мы начали подготовку к нашей краудфандинговой кампании, в рамках которой мы будем использовать такую систему, как Kickstarter, чтобы попытаться заручиться поддержкой игры. В дальнейшем нам потребуется много спонсоров, так что это будет довольно длительный процесс — но в случае, если мы справимся, мы сможем тратить всё наше время на разработку игры, что значительно повысит масштабы и скорости выпуска публичных обновлений игры.

Blog1 2

Благодаря вашей поддержке, мы в состоянии ежемесячно оплачивать наш закрытый вики-ресурс, что позволит нам лучше организовывать нашу документацию по разработке и планированию игры — это сделает всё намного, намного проще! В качестве заключительных слов, сейчас мы ведём работу над обновлением Alpha 0.6.5, которое, надеемся, выйдет в пределах нескольких недель или даже раньше! Данное обновление включает в себя новую систему интеракции, о которой говорилось в этом блоге, а также парочку других не менее интересных нововведений, которые мы готовим для показа. Обновление будет сперва выпущено для платных подписчиков на Patreon, согласно графику, изложенному в списке наград для платных подписчиков.

Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA , если не указано иное.