Подтвердить что ты не робот

Единство, перемещающееся в другую сцену с приостановкой текущей сцены

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

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

если я использую

Application.LoadLevel('battlescene');

затем

Application.loadLevel('townScene');

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

4b9b3361

Ответ 1

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

1) Если ресурсы не являются проблемой

Вы можете поместить все свои обычные сцены и объекты сцены битвы в одну сцену.

  • Создайте два пустых игровых объекта (один для объектов городской сцены, а другой для объектов битвы). Вы можете либо иметь две версии вашего игрового персонажа (ов) или одного. Затем напишите a script, который просто переключает камеру (камеры) с городской сцены на сцену битвы, когда битва начинается и возвращается в городскую сцену, когда битва более.

  • Если у вас есть одна версия каждого символа, вы можете просто добавить script, который изменит поведение вашего игрового символьного контроллера в/из боевого режима и нормального/городского режима.

  • Если у вас есть две версии каждого символа, вам просто нужно будет написать соответствующие скрипты контроллера символов и активировать/деактивировать игровые персонажи, согласно которым вы находитесь с помощью. Вот как такие игры, как Final Fantasy 7,8,9, достигли того же эффект. Были две версии игровых персонажей: одна для режима боя, а другая для обычного режима.

2) Если ресурсы являются проблемой (и я считаю более эффективным)

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

  • Создайте отдельный битвы и внутри вашей сцены, создайте пустой игровой объект, чтобы держать каждый объект в вашей сцене.

  • В вашей норамской сцене сделайте то же самое.

  • Когда вам нужно перейти в режим боя, используйте:

    Application.LoadLevelAdditive('battlescene');

  • И когда/если вы хотите выгрузить свою битву, после этого вы можете сделать это, просто написав код, чтобы уничтожить игровой объект battlescene так как он содержит все, что есть в вашей битве.

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

Надеюсь, это поможет. Я написал все это в спешке, но знаю, что что-то нужно прояснить.

Ответ 2

Вы можете сделать это с помощью script в С#

void onYourFunction()
{
    Time.timeScale = 0; //pauses the current scene 
    Application.LoadLevelAdditive("YourNextScene"); //loads your desired other scene
}

И если вы хотите активировать свою игру, вы можете использовать Time.timeScale = 1;

Ответ 3

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

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