Pull to refresh

Comments 13

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

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

Не очень понимаю, как без сцен… Всю сцену иметь как префаб? Ну… Не знаю даже… Уж очень радикально, как по мне…

Хотя с канвасами — мысль интересная, да…
Ну примерно да. Иметь серию вложеных префабов, по мере надобности реиспользования в виде дерева. Тогда некоторые ветки и листы будут одинаковыми между сценами, и менять можно будет на уровне файла префаба. Что в этом случае стоило бы автоматизировать, так это проверку на оверрайды и циклические ссылки, собственно чтобы не иметь их.
Еще добавлю, что технически — сцена и есть префаб. Но исторически помимо данных о префабе в сцене еще куча всего дополнительного тянется. Еще сложность со сценами при работе с бандлами дополнительная, тк в Юнити есть разделение форматов и поведения с ними при асинхронной загрузке. + при сборке Юнити делает еще один дополнительный невидимый бандл, в который кладет сцены из списка Build Settings и принудительно поднимает в память первую сцену из списка при загрузке движка и до инициализации скриптов.
Сцены хороши и сейчас для изоляции физических миров или ресурсов, но я по возможности создаю их на лету. Еще в случае если приходится пользоваться лайтмапами или статическим батчингом то я использую сцены.
Хотел написать такой же комментарий, но увидел ваш. Сцена дейстительно, помимо (спорно) искуственных привязок света и прочих вещей к ней, по сути не отличается от префаба. В это смысле любой game object с дочерними game object-ами — это и есть сцена для них дочерних. Напрашивается вопрос — почему бы тогда не унифицировать. Вспоминается старый добрый Adobe Flash, где была концепция movieclip (эквивалент game object), library movieclip (эквивалент prefab) и scene (эквивалент scene). Но вперед был выпячен так называемый root/main movieclip (могу соврать на счет названия). То есть структура была та же, но напрямую со сценой никто не работал, в отличие от Unity, все происходило в корневом мувиклипе. Хотя и можно было параллельно корневому добавить ещзе мувиклипов в саму сцену. Но этим почти никто и никогда не пользовался, а некоторые и не знали, что такое есть. Кроме того сцена была ровно одна, нельзя было отгружать одну и подгружать другу. На этом языке разговаривали мувиклипы.
в плюс использования именно сцен — автоматическая очистка ресурсов при выгрузке. Но это и минус — тормоза при переходе между сценами, и утечка памяти если ссылки в статике не почистить.
Возможно я все же упустил суть статьи, но разве нельзя добиться большей части описанного просто используя префабы?
Описанный способ помогает для тех случаев, когда у вас появляется новый префаб, но его нет на сценах. Или когда вы, например, переводите проект с 3D-интерфейсом с проект с 2D-интерфейсом (например, из VR-проекта хотите сделать мобильное приложение для Android).
Наверное можно, но тут описан альтернативный подход, который может пригодится в тех случаях, когда префабов не достаточно. Тем и полезно. ;)
А почему бы не выделить общую часть для всех сцен в отдельную сцену? А потом грузить две сцены, одну с общими элементами и одну с частными для каждого уровня или локации?
Да, таким вариантом я тоже пользуюсь и обычно выделяю из общих элементов префаб-шаблон для сцены. Его я использую для новых сцен чаще всего. А вот для того, чтобы заменить шаблон на старых сценах (или дополнить/изменить параметры префабов для конкретных сцен), я уже прохожусь скриптом. Так удобнее
Это в какой игре надо хардкодом в 50 сценах ставить одни и те же значения на объектах с уникальными именами? (А если кто-то другому объекту даст такое же имя? Ну ладно).
Ну, может канвасы везде будут иметь одинаковые настройки — но здесь не представляю ситуацию когда «префабов недостаточно». Да и это не тот объект, который нужно менять чаще чем раз за всегда. Ну может если игра типа марио, да, могу предположить наличие таких объектов в разных сценах, но тут опять же — префабы это раз. Второе — не мучайте игроков, сделайте уровни либо сериализацией, либо префабами, сцена это дополнительное время загрузки, и + куча лишней метадаты.
Короче — я не смог придумать ситуации, когда префабы не решили бы проблему (даже если вы еще на Юнити, в которой нет nested prefabs и prefab variants).
ЗЫ. И, да. Класть скрипты в папку Editor в Юнити 2017+ уже не актуально, и даже вредно — используйте assembly definition, иначе потом, когда (если) проект станет взрослым и серьезным, смешать все вместе будет сложно и будет немало попаболи.
Способ интересный, хотя не понимаю его актуальность перед более простыми префабами (даже с вышеуказанными минусами) и Сериализацией, но может и пригодится)
Sign up to leave a comment.

Articles

Change theme settings