Как вы ещё используете 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 больше не использовать)
|
|
| |
|