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