Понедельник, 11 Ноября 2024, 01:10

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как вы ещё используете SceneManager?
alexsilentДата: Четверг, 09 Января 2020, 07:01 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Мне кажется SceneManager сделали для удобства, но какое удобство с этим может быть!?
Я пока не совсем понимаю.
Можно ли что-то большее выжать из SceneManager, чем просто загрузка уровня?
Код
SceneManager.LoadScene("scenename");


1) Можно ли сделать SceneManager, как альтернативу DontDestroyOnLoad?
В теории, мне кажется можно, но пока не понял как. Мне вот например, нужно сделать камеру HUD,
чтобы она никогда не удалялась, и при перезагрузке уровня была промежуточным окном между уровнями,
как например в Скайриме:

2) Как вы иначе используете SceneManager, есть ли у этого менеджера другие цели и возможности?
3) Если создать несколько уровней: активный для игры, а остальные для данных и системных скриптов и объектов.
Как сделать так, чтобы был виден только активный уровень, а остальные работали, но не были видны в игре?

PS Я просто до этого всегда использовал оператор Application.LoadLevel (или как-то так), но он уже устарел,
и мне теперь интересно, зачем целый менеджер городить ради этого, неужели там много новых интересных фич и удобств?


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 07:10
drcrackДата: Четверг, 09 Января 2020, 08:38 | Сообщение # 2
старожил
Сейчас нет на сайте
Цитата
Можно ли что-то большее выжать из SceneManager, чем просто загрузка уровня?

можно загрузить сцену аддитивно, тем самым одновремено будут активны несколько сцен
это собсна заодно и ответ на вопросы 1, 2 и 3 — все решается с помощью нескольких сцен

Цитата
Как сделать так, чтобы был виден только активный уровень, а остальные работали, но не были видны в игре?

такой возможности нет, если нужно скрыть обьекты (оставив их включенными), тебе это придется делать традиционными способами (т.е. так, как бы ты делал, если бы они были на одной сцене)
alexsilentДата: Четверг, 09 Января 2020, 09:13 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
можно загрузить сцену аддитивно

Через
Код
SceneManager.MergeScenes
?

Цитата drcrack ()
(т.е. так, как бы ты делал, если бы они были на одной сцене)

Жаль, придётся искать другие способы, чтобы системные файлы, системные объекты и скрипты куда-то прятать на уровне,
как обычно приходится их куда-то далеко по координатам мира закидывать,
например через
Код
transform.position = new Vector3(-10000,-10000,-10000)


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 09:14
drcrackДата: Четверг, 09 Января 2020, 10:52 | Сообщение # 4
старожил
Сейчас нет на сайте
Цитата
Через

Код
SceneManager.LoadSceneAsync("scenename", LoadSceneMode.Additive);


Цитата
SceneManager.MergeScenes

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

Цитата
transform.position = new Vector3(-10000,-10000,-10000)

ты можешь поставить их на отдельный слой и в настройках камеры отключить его рендеринг


Сообщение отредактировал drcrack - Четверг, 09 Января 2020, 10:53
alexsilentДата: Четверг, 09 Января 2020, 11:43 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
ты можешь поставить их на отдельный слой и в настройках камеры отключить его рендеринг

А в таком состоянии работает ли рейтресинг или например функция OnMouseDown()?
Потому-что у меня там много системных кнопок, которые можно случайно нажать.
А мне этого не надо, потому и подальше отодвигаю объекты.

Цитата drcrack ()
SceneManager.LoadSceneAsync("scenename", LoadSceneMode.Additive);


Спасибо!
Я так понял, если юзать без LoadSceneMode.Additive, у меня будут старые мульти-уровни удаляться?!


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 11:45
pixeyeДата: Четверг, 09 Января 2020, 11:59 | Сообщение # 6
Red Winter Software
Сейчас нет на сайте
Цитата alexsilent ()
Я так понял, если юзать без LoadSceneMode.Additive, у меня будут старые мульти-уровни удаляться?!


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

В акторсах например я писал отдельную систему которая контролирует подгрузку сцен и следит за тем какие сцены должны остаться если основная сцена сменится.


Вообще я бы аккуратно с мультисценами работал) имхо гемороя от них часто больше чем пользы.


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

alexsilentДата: Четверг, 09 Января 2020, 13:53 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
pixeye,
Цитата pixeye ()
Вообще я бы аккуратно с мультисценами работал) имхо гемороя от них часто больше чем пользы.

Я тогда вообще не понимаю зачем SceneManager придумали),
лучше бы и дальше все пользовались Application.LoadLevel :)

А ещё я окончательно запутался как мне использовать SceneManager) пошёл гуглить уроки по этому менеджеру,
а то у меня теперь сомнения: нужно ли выгружать старые уровни, чтобы загрузить новые, или автоматически всё происходит)
полез искать примеры обычного аналога Application.LoadLevel


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 13:57
drcrackДата: Четверг, 09 Января 2020, 15:17 | Сообщение # 8
старожил
Сейчас нет на сайте
Цитата
Я тогда вообще не понимаю зачем SceneManager придумали),

просто собрали в один класс все инструменты для работы со сценами, причем сделали это очень давно, а ты так пишешь как будто его еще в прошлой версии не было

Цитата
а то у меня теперь сомнения: нужно ли выгружать старые уровни, чтобы загрузить новые, или автоматически всё происходит)

в документации есть ответы и на этот и на все остальные твои вопросы
alexsilentДата: Пятница, 10 Января 2020, 15:10 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
а ты так пишешь как будто его еще в прошлой версии не было

да я только перехожу на новую версию, ибо раньше всегда сидел на старой юнити и пользовался JS,
новые версии c 2017.3 кажется уже не поддерживают JS, сейчас переписываю на C#,
пришлось принять как данность, что Application.LoadLevel больше не использовать)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг