В моем меню параметров есть 2 кнопки: «вернуться в главное меню» и «отключить музыку». К каждой из этих кнопок прикреплен скрипт, и при нажатии вызывается метод скрипта OnPress (). У меня также есть основной объект / скрипт уровня, который обрабатывает загрузку сцены и прочее. Таким образом, скрипт кнопки главного меню выполняет FindObjectOfType () в своем Start, а затем вызывает level.LoadStartScene () в своем OnPress (). Сценарий для кнопки отключения звука делает то же самое, но вызывает level.ToggleMuteMusic (). Раньше это прекрасно работало, но потом я сделал уровень синглтоном со следующим кодом:
public void Awake() {
InitializeSingleton();
}
private void InitializeSingleton() {
if (FindObjectsOfType(GetType()).Length > 1) {
Destroy(gameObject);
} else {
DontDestroyOnLoad(gameObject);
}
}
Так что теперь кнопка главного меню работает отлично, но кнопка отключения звука выдает ошибку;Я думаю, это потому, что в Start () он находит старый объект уровня, а затем входит тот, который с DontDestroyOnLoad, и удаляет старый, но тогда почему кнопка главного меню работает ???
Кнопка отключения звукаКод:
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class MuteButton : MonoBehaviour {
[SerializeField] string mutedText = "Unmute Music";
[SerializeField] string unmutedText = "Mute Music";
private Level level;
private TextMeshProUGUI myText;
public void Start() {
level = FindObjectOfType<Level>();
myText = GetComponent<TextMeshProUGUI>();
}
public void OnPress() {
if (level == null) {
Debug.Log("log 1");
}
level.ToggleMuteMusic();
bool muteMusic = level.GetMuteMusic();
if (muteMusic == true) {
myText.SetText(mutedText);
} else if (muteMusic == false) {
myText.SetText(unmutedText);
}
}
}
Код кнопки меню:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MenuButton : MonoBehaviour {
Level level;
public void Start() {
level = FindObjectOfType<Level>();
}
public void OnPress() {
level.LoadStartScene();
}
}
Полная ошибка:
MissingReferenceException: объект типа 'GameObject' был уничтожен, но вы все еще пытаетесьчтобы получить к нему доступ. Ваш сценарий должен либо проверить, является ли он нулевым, либо вы не должны уничтожать объект. UnityEngine.GameObject.GetComponent [T] () (в C: /buildslave/unity/build/Runtime/Export/Scripting/GameObject.bindings.cs: 28) Level.ToggleMuteMusic () (в Assets / Scripts / Level.cs:74) MuteButton.OnPress () (в разделе Активы / Сценарии / MuteButton.cs: 23)
Спасибо за ваше время:)