Dontdestroy и дублирующиеся объекты при возвращение к сцене

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Dontdestroy и дублирующиеся объекты при возвращение к сцене

Сообщение snivik 24 апр 2012, 16:30

Доброго времени суток,

Иммется Score Counter, котрый после смерти персонажа исопльзуется другой сценой, в которой пишется хай скор и предлагается переиграть или вернуться в меню. Так случилось, что мне необходимо было сделать это другой сценой, а не окошком поверх или чем-то подобным. Чтобы от перехода с сцены на сцену не терять Score, я обхекту в awake() оставил DontDestroyOnLoad. Но тут ко мне пришла другая проблема. Если вернуться в игр, то объект score() дублируется. У меня есть идеи, как его убрать (Убирать старый при нажатие replay, создать промежуточную сцену, которая чистит все, что нужно или что то в этом роде), но хотелось бы узнать, есть ли заранее-придуманный способ? Ну что-то типо DontCreateDublicates() или bool dublicatesExist(), которыми можно было бы проверять дубликаты на сцены и уничтожать их.

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

Заранее Спасибо :)
Just a small reminder: There is no sense in reading this text, so you're just spending your time for nothing. Have a Nice Day :)
Аватара пользователя
snivik
UNец
 
Сообщения: 20
Зарегистрирован: 20 апр 2012, 16:19

Re: Dontdestroy и дублирующиеся объекты при возвращение к сцене

Сообщение alexsilent 25 апр 2012, 06:59

Попробуйте сделать самой первой пустой сценой этот самый Score, и сразу же от него переключение на титульный экран.
И получается так что эта самая нулевая сцена будет инициализироваться только один раз в самом самом начале, до заставки.
Для того чтобы все обнулить, где-то видел операцию Default на все значения объекта. Но не помню как называется.
alexsilent
UNIверсал
 
Сообщения: 440
Зарегистрирован: 21 май 2011, 10:30

Re: Dontdestroy и дублирующиеся объекты при возвращение к сцене

Сообщение Guyver 25 апр 2012, 07:31

используйте синглтон ... и не мучайтесь:

Синтаксис:
Используется csharp
public class MySingletonClass : MonoBehaviour {
        private static MySingletonClass instance = null;
       
        public static MySingletonClass Instance
        {
                get {
                        if (instance == null) {
                                instance = FindObjectOfType(typeof(MySingletonClass)) as MySingletonClass;
                        }
           
                        // If it is still null, create a new instance
                        if (instance == null) {
                                GameObject obj = new GameObject("MySingletonClass");
                                instance = obj.AddComponent(typeof(MySingletonClass)) as MySingletonClass;
                                Debug.Log("Could not locate an MySingletonClass object. MySingletonClass was Generated Automaticly.");
                        }
                       
                        return instance;
                }
        }

        void Awake ()
        {
                if (instance == null) {
                        DontDestroyOnLoad(this);
                }
        }
}
 


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

Синтаксис:
Используется csharp
        MySingletonClass.Instance.СделатьКрасиво(аргументы);

        или

        MySingletonClass.Instance.публичноеПоле =+ 100500;
 


п.с. его можно добавить на сцену гденить ... можно не добавлять .. оно само создаст GO и навесится на него при первом обращении к классу. все дальнейшие обращения к классу будут уже напрямую по указателю .. без всяких поисков.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Dontdestroy и дублирующиеся объекты при возвращение к сцене

Сообщение Syberex 25 апр 2012, 07:54

Может сделать в Awake() или Start() по singleton шаблону:

Синтаксис:
Используется csharp
public class ScoreCounter : MonoBehaviour {
    static private GameObject firstInstance = null;

    void Awake() {
        if (firstInstance == null)
            firstInstance = gameObject;
        else if (gameObject != firstInstance)
            Destroy(gameObject);         // самоуничтожение
    }

}
 
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Dontdestroy и дублирующиеся объекты при возвращение к сцене

Сообщение AndreyMust19 25 апр 2012, 15:33

У вас однопользовательская игра? Тогда проще сделать статический класс Score со статическими переменными.
В каждой сцене навесить на игрока (или на пустой объект, если игрока нет) другой класс, к-й будет только отображать количество очков и рекорды, взятые из Score.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Dontdestroy и дублирующиеся объекты при возвращение к сцене

Сообщение snivik 25 апр 2012, 16:34

Спасибо за помощь. Способ с самоуничтожением объекта в случае обнаружения дубликатов это именно то, что я искал. Ну и за остальные способы спасибо :) Идея с нулевой сценой мне приходила в голову, но почему то создание лишних сцен ассоциируется у меня с перегрузом игры. В любом случае спасибо всем отозвавшимся :)
Just a small reminder: There is no sense in reading this text, so you're just spending your time for nothing. Have a Nice Day :)
Аватара пользователя
snivik
UNец
 
Сообщения: 20
Зарегистрирован: 20 апр 2012, 16:19


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot], Google [Bot] и гости: 20