Страница 1 из 2

Передача данных между сценами

СообщениеДобавлено: 03 дек 2009, 15:45
ziat
Вопрос такого плана.
Как передать значения переменных между сценами?
ТОлько через сохранение на диске в конце одной сцены и загрузку из другой?

Re: Передача данных между сценами

СообщениеДобавлено: 03 дек 2009, 15:50
Avatarchik
Можно в одной сцене сделать скрипт со static переменной например public static int test;
А в другой сцене читать эту переменную nameScript.test

Re: Передача данных между сценами

СообщениеДобавлено: 03 дек 2009, 16:35
Neodrop
Делаем объект. Веаем на него скрипт, сохраняющий передаваемые данные. В нём пишем : DontDestroyOnLoad (this);
Всё. Этот объект сохранится во всех сценах. Главное, чтобы он висел в первой, чтобы его перенесло в следующие.

Re: Передача данных между сценами

СообщениеДобавлено: 24 апр 2012, 22:42
vovkalexey
Вот удачный простой пример (видео) того о чем говорит NeoDrop: http://cgcookie.com/unity/2012/04/23/lu ... tant-data/

Re: Передача данных между сценами

СообщениеДобавлено: 25 апр 2012, 07:50
Guyver
мой ответ в конце: viewtopic.php?f=105&t=8615

Re: Передача данных между сценами

СообщениеДобавлено: 25 апр 2012, 09:59
Woolf
А почему все забывают про статик классы? Это же проще, чем создавать пустые ГО, которые, кстати, хоть на чуть-чуть, а снижают производительность. Если не нравится статик, делаем классический инстанс:

Синтаксис:
Используется csharp
class RoomManager
{
   
    public static RoomManager Inst= new RoomManager();

  //Данные
   public float foo1=0;
   public float foo2=0;
}
.......
//Обращаемся ИЗ ЛЮБОГО ОБЪЕКТА И ЛЮБОЙ СЦЕНЫ
RoomManager.Inst.foo1=5f;


Естественно, данный объект может быть только один в проекте.

Re: Передача данных между сценами

СообщениеДобавлено: 25 апр 2012, 10:59
seaman
Естественно, данный объект может быть только один в проекте.

Ну тогда нужно нормальный синглтон делать, тогда он автоматом будет один в проекте:
Синтаксис:
Используется csharp
class InputManager : Manager
{
    #region Singleton
         static InputManager(){}
         private static readonly Manager _instance = new InputManager();
         public static Manager Instance{ get { return _instance; } }
    #endregion
...
   public float myVar;
}

Обращаемся:
Синтаксис:
Используется csharp
InputManager.Instance.myVar = 0.0f;

Re: Передача данных между сценами

СообщениеДобавлено: 25 апр 2012, 12:05
Guyver
как я понимаю .. в приведённом мной примере, вся магия происходит вокруг наследия от монобеха.

разумеется там можно намутить всякого рода апдейты онгуи и чёрта лысого ... а обращаться к такому обьекту из проекта удобно и не нада искать там что то по сцене .. или запоминать на него указатель .. он сам помнит.

разумеется классический синглтон тоже имеет право на существование.

это скажем адаптация классического синглтона под реалии юнити пайплайна.

Re: Передача данных между сценами

СообщениеДобавлено: 25 апр 2012, 16:43
Hargrim
А почему все забывают про статик классы? Это же проще, чем создавать пустые ГО, которые, кстати, хоть на чуть-чуть, а снижают производительность. Если не нравится статик, делаем классический инстанс

А как без объекта стартануть скрипт? Или речь о собственной библиотеке? Не могли бы прояснить этот момент?

Re: Передача данных между сценами

СообщениеДобавлено: 25 апр 2012, 18:15
seaman
А как без объекта стартануть скрипт?

А Вы вообще знакомы со статик классами? Нет - почитайте!

Re: Передача данных между сценами

СообщениеДобавлено: 25 апр 2012, 20:59
Hargrim
А Вы вообще знакомы со статик классами? Нет - почитайте!

Как же на форумах любят окунать людей в нечистоты, даже не разобравшись в сути вопроса. Ну да ладно, когда-нибудь привыкну.

Отвечая на Ваш вопрос - да, уважаемый, я прекрасно знаком со статическими классами. Беда в том, что я НЕ прекрасно знаком с Unity3d. Поэтому и набрался храбрости задать вопрос. И из того что я смог понять, это то, что все файлы содержащие код, должны для исполнения крепиться к созданным в Unity3d объектам, будь то пустышка или высокодетализированная модель суперпупер чего-то там (т.е. имелись в виду НЕ объекты, являющиеся представителями написанных нами с Вами НЕстатических классов). Т.е. написал я статик класс, что с ним делать дальше, если это просто файлик, никак не отраженный в иерархии сцены?

Re: Передача данных между сценами

СообщениеДобавлено: 25 апр 2012, 21:06
Zaicheg
Gonzik писал(а):все файлы содержащие код, должны для исполнения крепиться к созданным в Unity3d объектам, будь то пустышка или высокодетализированная модель суперпупер чего-то там (т.е. имелись в виду НЕ объекты, являющиеся представителями написанных нами с Вами НЕстатических классов)

Нет, не должны.

Re: Передача данных между сценами

СообщениеДобавлено: 26 апр 2012, 09:36
Hargrim
Нет, не должны.

Так это ж полностью меняет дело. Спасибо за просвещение!

Re: Передача данных между сценами

СообщениеДобавлено: 26 апр 2012, 11:41
AndreyMust19
К объектам в виде компонентов могут крепиться только те скрипты, к-е описывают класс, унаследованный от MonoBehaviour. Все остальные ваши классы работают как обычные классы платформы .NET (только имеющие стороннюю реализацию).

Re: Передача данных между сценами

СообщениеДобавлено: 17 июн 2015, 21:17
headfucker
Можно использовать PlayerPrefs. Это сохранение какого-либо параметра на всю игру, в параметр загоняешь название сцены и при переходе на другую читаешь этот параметр. Если (он == "сцена1") { появись здесь } или через свич, как удобно будет.