Как SceneManager.LoadScene() удаляет объекты?(Решено)
Добавлено: 06 янв 2019, 12:54
Добрый всем день! С прошедшими праздниками и кануном рождества!
Я думал, что при стандартной загрузке другой сцены объекты текущей сцены должны удаляться, с вызовом их деструкторов.
На сцене есть UI объекты, на некоторых из них висит текущий скрипт:
При переходе в другую сцену:
Я ожидал вызова деструктора ~MyButtToggle (). Но этого не происходит. В чём моя ошибка? Необходимо самому перед переходом на другую сцену вызывать деструктор?
Я думал, что при стандартной загрузке другой сцены объекты текущей сцены должны удаляться, с вызовом их деструкторов.
На сцене есть 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("удалили объект");
}
, 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");
}
PoligActions.dMainLineToGo.Clear ();
PoligActions.dGoToMainLine.Clear ();
LineActions.dPointToLine.Clear ();
SceneManager.LoadScene ("MainMenu");
}
Я ожидал вызова деструктора ~MyButtToggle (). Но этого не происходит. В чём моя ошибка? Необходимо самому перед переходом на другую сцену вызывать деструктор?