2016-11-30 2 views
1

Ищет шаблон для перехода между сценами, перемещая один экземпляр объекта на следующую сцену, а затем возвращая его в предыдущую сцену, но не уничтожая другие объекты, которые были в предыдущей сцене. Вот он и есть контекст:Unity Pattern для перемещения некоторых объектов между сценами?

  • Когда моя игра загружается, она подключается к моему серверу, чтобы получить список символов, которые игрок может контролировать и динамически создает из сборника.
  • Сценарий загрузки перемещает каждый объект игровой игры в основную сцену, а затем загружает эту сцену.
  • Основная сцена теперь имеет символы, с которыми можно взаимодействовать. Все идет нормально. Одна из команд - выбрать конкретный символ и отправить их на задание, которое имеет свою собственную сцену задач.
  • Я могу перенести этот символ на сцену задачи и переместить их назад, когда задача будет завершена. Тем не менее, другие персонажи, которые не были в задаче и не должны находиться на задаче, теперь уничтожены, потому что основная сцена была выгружена.

Я ищу образец для этого. Большинство из того, что я прочитал, предлагает использовать DontDestroyOnLoad, но это фактически перемещает все символы во все сцены, что приводит к слишком большому количеству символов на сцене задачи. Другой вариант может заключаться в создании игрового объекта, который содержит всю информацию о символе, передает это между сценами и имеет логику в каждой сцене, чтобы повторно создать соответствующий символ [s] в этой сцене. Это ощущается как много накладных расходов, так как у меня нет других причин, чтобы вытирать и постоянно воссоздавать их. Возможно, третий вариант состоит в том, чтобы реструктурировать мою игру, чтобы сюжетная сцена просто добавилась к основной сцене и появилась в виде своего рода наложения, которое блокирует/захватывает входные данные. Это звучит беспорядочно и, вероятно, имеет проблемы с производительностью (для Android).

У кого-нибудь есть хороший образец для этого?

+0

вам нужно больше, чем один экземпляр каждого символа делать? Статическая декларация сделает это, если вам не нужны 2 «лучника» или что-то еще. – Aaron

+0

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

+0

Статический список должен работать. Создав их, добавьте их в список. – Aaron

ответ

-2

Превращение комментариев в ответ.

Доступ к статическим переменным возможен из любой сцены. В зависимости от количества каждого типа класса, который вам нужен, вы можете либо создать статический класс, либо статический список/массив класса. Когда вы добавите к нему свои объекты, вы сможете получить доступ к ним из любого места.

Если это не проблема памяти (например, тысячи больших объектов), это должно хорошо работать для ваших целей (несколько символов, которые должны сохраняться на протяжении всей игры).

+0

Но статическая переменная цель не та. Кроме того, это приведет к потере данных. Коллекция игрового объекта не переживет перезагрузку. Нет, это не правильный ответ. – Everts

+0

Я всегда занимаюсь исследованием перед публикацией, если это действительно глупо. Это была моя рекомендация перед публикацией. http://answers.unity3d.com/questions/41891/static-variables-between-scenes.html – Aaron

+0

Ну, несмотря на 20+ upvote, это не делает это правильно. Я предполагаю, что 19 из них были от новичков, просто счастлив иметь рабочее решение. Однако это не делает это правильно. Статические имеют другую цель. PlayerPrefs и DontDestroyOnLoad имеют такую ​​цель, чтобы сохранять данные по сцене или через сеансы. – Everts

0

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

После того, как вы выгрузите первую сцену (а не ту, которую вы создаете), и вы загрузите следующую сцену.

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

PS: у вас есть несколько нагрузок сцены, в то же время проверить эту ссылку для получения дополнительной информации: https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.html

Смежные вопросы