Gamedev Андрей Верещагин
2 640

Как экономить время работы при создании игрового окружения

Основы работы с префабами.

В закладки

Геймдизайнер Нейтан Чивер, который участвовал в создании Mafia III, The Suffering и No One Lives Forever 2, в своём блоге на сайте Gamasutra рассказал, как использование префабов, наборов игровых объектов и логики, может облегчить работу команды разработчиков, когда нужно иметь дело с большим количеством контента. Мы выбрали главное из материала.

Если вам когда-нибудь приходилось иметь дело с большим количеством объектов сразу в нескольких сценах, то вы наверняка хотели их сгруппировать, чтобы быстро управлять их размещением. Если вам, например, нужно добавить настольные лампы в 30 разных офисах в 15 локациях, намного удобнее задать интенсивность их света один раз, чем 450, не так ли? В этом может помочь префаб — набор игровых объектов и логики, которые используются в нескольких местах в игре.

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

Все особенности сцены должны быть присущи и префабу:

  • набор моделей;
  • здание, с заданными маршрутами AI и узлами взаимодействия;
  • противники;
  • скрипты;
  • скайбоксы со всеми их эффектами и анимациями.

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

Использование в игре

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

Динамические префабы используются для потоковой передачи контента. Если всё сделать правильно, то они будут отвечать за то, чтобы весь контент попадал в игру.

В процедурных системах вроде Houdini можно расширить их до «умных» префабов. Они содержат в себе набор правил, которые решают где, когда и сколько раз разместить каждый объект.

Суть префабов

Каждая сцена может быть создана с помощью нескольких префабов.

Теперь посмотрим, как сразу несколько человек могут работать над одной сценой с помощью префабов.

Команда художников работает над «Участком А». Первый художник создаёт «Строение D» вместе с его внутренним освещением. Оно будет использоваться в двух локациях. Второй художник работает над «Строением С», которое применят в четырёх локациях. Художник под номером 3 создаёт «Строение В», использующееся в трёх местах, а четвёртый художник работает над «Строением А» и его освещением.

Пятый художник создаёт общее освещение сцены, которое будет работать на геймлей. Отдел звука занимается тем же самым. Дизайнеры же работают над созданием логики поездов и городских башен. Последние будут использованы на «Участке В» четыре раза. При этом первый дизайнер занят работой над локацией в общем.

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

Пример сцены

Давайте сгруппируем локации на сцене в префабы, чтобы несколько человек могли работать над ними.

Дизайнеры делают префабы из городских кварталов. Каждое строение имеет собственное название и сохраняется как префаб, а квартал из префабов сохраняется в один сектор (хотя, это опционально). Таким образом, вся сцена теперь состоит из дорог, игровой логики, префабов и секторов.

Художники могут редактировать каждый из префабов, добавляя новые объекты. Они также могут открыть сектора, чтобы понять взаимосвязи между каждым префабом.

Когда дизайнер снова открывает сцену, перед ним предстают все префабы с теми изменениями, которые сделал художник.

Разрез сцен

Прежде чем говорить о секторах и их устройстве, нужно понять, как организованы сцены. Каждая из них состоит из четырёх основных компонентов.

Применив этот концепт к секторам, мы создадим очень гибкую платформу для работы. Теперь можно добавлять или убирать части основной сцены, не влияя на неё напрямую. Каждый компонент может стать префабом для конкретного сектора.

Некоторым префабам не обязательно быть уникальными для сектора, поэтому их можно сделать общими.

Редактирование префабов

Существует два способа редактирования префабов: редактирование в новой сцене и редактирование в текущей сцене.

Дельты

По своей сути, префабы, помещённые на сцену — это вариации оригинального префаба. Если внести изменения в один из них, они будут применены ко всем его копиям на сцене. Это полезно, если вам, например, нужно изменить текстуру на сотне одинаковых объектов.

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

#опыт #левелдизайн

{ "author_name": "Андрей Верещагин", "author_type": "editor", "tags": ["\u043e\u043f\u044b\u0442","\u043b\u0435\u0432\u0435\u043b\u0434\u0438\u0437\u0430\u0439\u043d"], "comments": 7, "likes": 31, "favorites": 52, "is_advertisement": false, "subsite_label": "gamedev", "id": 21720, "is_wide": false, "is_ugc": false, "date": "Wed, 20 Jun 2018 17:20:35 +0300" }
{ "id": 21720, "author_id": 22254, "diff_limit": 1000, "urls": {"diff":"\/comments\/21720\/get","add":"\/comments\/21720\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/21720"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954 }

7 комментариев 7 комм.

Популярные

По порядку

Написать комментарий...
6

Статья-префаб. Вроде префаб хороший, но как-то не докрутили и контентом не наполнили.

Ответить
0

Возможно на хабре будет полный перевод в течение пары дней от PatientZero, он такое любит переводить.

Ответить
2

Нравятся умники, которым дали бесплатно дельные советы, а они еще и выпендриваются

Ответить
–13

круто. как заполонить игру одинаковым контентом.

Ответить
8

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

Ответить
0

Префабы имеют замечательное свойство - изменяться.

Ответить
0

Это всё слишком сложно, пойду дворником работать.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Пять простых способов разогнать свой ПК
с помощью соли и чайной ложки
Подписаться на push-уведомления