Войти
UnityФорумПрограммирование

Вопрос по C#

#0
20:47, 16 окт 2022

Возник такой вопрос. При переходе на другую сцену обязательно убирать "слушатель" с кнопки?

Пример, чтобы было понятнее:

void Start(){
  btn_Ok.onClick.AddListener(onClickOk);
  ...
}

void onClickOk(){
  btn_Ok.onClick.RemoveListener(onClickOk);
  ...

  SceneManager.LoadScene("Scene2");
}

#1
22:11, 16 окт 2022

В большинстве случаев нет, не обязательно, так как при загрузки новой сцены с  SceneManagement.LoadSceneMode mode = LoadSceneMode.Single, все прочее сцены выгружаются из памяти, и все их зависимости также.

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

В вашем примере вы скорее убираете возможность множественного вызова слушателей события onClick, что при загрузке сцены в синхронном режиме не вызовет проблемы. 

[RequireComponent(typeof(Button))]
public class Test : MonoBehaviour
{
    [SerializeField] private Button _button;
    
    private void Awake() =>
      _button.onClick.AddListener(LoadScene2);

    private void LoadScene2()
    {
      _button.onClick.RemoveListener(LoadScene2);
      SceneManager.LoadScene("Scene2");
    }
}
#2
6:08, 17 окт 2022

Спасибо, все понятно :)

UnityФорумПрограммирование