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

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

СообщениеДобавлено: 06 янв 2019, 12:54
Roman777
Добрый всем день! С прошедшими праздниками и кануном рождества!

Я думал, что при стандартной загрузке другой сцены объекты текущей сцены должны удаляться, с вызовом их деструкторов.
На сцене есть 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 (). Но этого не происходит. В чём моя ошибка? Необходимо самому перед переходом на другую сцену вызывать деструктор?

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

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

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

СообщениеДобавлено: 06 янв 2019, 13:23
Roman777
Спасибо) то что нужно) [V]

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

СообщениеДобавлено: 07 янв 2019, 19:32
Anonymyx
Деструкторы не вызываются в момент удаления объектов. Время их вызова зависит исключительно от сборщика мусора. Т.е. знать когда они вызовутся - невозможно.