Как SceneManager.LoadScene() удаляет объекты?(Решено)

Программирование на Юнити.

Как SceneManager.LoadScene() удаляет объекты?(Решено)

Сообщение Roman777 06 янв 2019, 12:54

Добрый всем день! С прошедшими праздниками и кануном рождества!

Я думал, что при стандартной загрузке другой сцены объекты текущей сцены должны удаляться, с вызовом их деструкторов.
На сцене есть UI объекты, на некоторых из них висит текущий скрипт:

Синтаксис:
Используется csharp
public class MyButtToggle : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler
, IPointerEnterHandler, IPointerExitHandler {
        //      private bool pressed;
        public bool Interactible;
        public Image TargetGraphic;
        public Color HighLight;
        public Color NormalColor;
        public Color PressedColor;
        public Color DownedColor;
        public Color DisabledColor;

        private bool entered;
        private bool downed;

        private static int BtnsCnt;
        private int index;
        private static List<bool> pressed = new List<bool>();
        private static List<MyButtToggle> Links = new List<MyButtToggle>();
        //В конструктор закладываем немного "магии"
        MyButtToggle (){
                BtnsCnt++;
                index = BtnsCnt - 1;
                Links.Add (this);
                pressed.Add(false);
        }
        ~MyButtToggle (){
                BtnsCnt--;//Уменьшаем индекс
                //После выхода на другой level объект не заходи в удаление и index остаётся прежним. При создании
                //нового объекта, индекс увеличивается.
                Debug.Log("удалили объект");
        }


При переходе в другую сцену:
Синтаксис:
Используется csharp
                if (Input.GetKeyDown (KeyCode.Escape)) {
                        PoligActions.dMainLineToGo.Clear ();
                        PoligActions.dGoToMainLine.Clear ();
                        LineActions.dPointToLine.Clear ();

                        SceneManager.LoadScene ("MainMenu");
                }

Я ожидал вызова деструктора ~MyButtToggle (). Но этого не происходит. В чём моя ошибка? Необходимо самому перед переходом на другую сцену вызывать деструктор?
Последний раз редактировалось Roman777 06 янв 2019, 13:23, всего редактировалось 1 раз.
Roman777
UNIт
 
Сообщения: 95
Зарегистрирован: 06 мар 2016, 12:09

Re: Как SceneManager.LoadScene() удаляет объекты?

Сообщение 1max1 06 янв 2019, 13:06

Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как SceneManager.LoadScene() удаляет объекты?(Решено)

Сообщение Roman777 06 янв 2019, 13:23

Спасибо) то что нужно) [V]
Roman777
UNIт
 
Сообщения: 95
Зарегистрирован: 06 мар 2016, 12:09

Re: Как SceneManager.LoadScene() удаляет объекты?(Решено)

Сообщение Anonymyx 07 янв 2019, 19:32

Деструкторы не вызываются в момент удаления объектов. Время их вызова зависит исключительно от сборщика мусора. Т.е. знать когда они вызовутся - невозможно.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55


Вернуться в Скрипты

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6