Dúvida relacionada a comportamento de objetos
2 participantes
Página 1 de 1
Dúvida relacionada a comportamento de objetos
Olá!
Estou trabalhando em um menu de pausa. Quando o mesmo for ativado, o som deve pausar e mostrar o menu. Quando o player quiser voltar ao jogo, a musica retorna.
A princípio, parecia estar funcionando. Mas notei que, quando a cena termina e é recarregada, o problema aparece. O objeto perde a referência:
Antes de recarregar a cena:
Depois de recarregar a cena:
Game Manager:
Menu de Pausa:
Retorna esse erro:
Alguém saberia informar por que a referência é perdida após recarregar a cena?
Grato pela atenção!
Estou trabalhando em um menu de pausa. Quando o mesmo for ativado, o som deve pausar e mostrar o menu. Quando o player quiser voltar ao jogo, a musica retorna.
A princípio, parecia estar funcionando. Mas notei que, quando a cena termina e é recarregada, o problema aparece. O objeto perde a referência:
Antes de recarregar a cena:
Depois de recarregar a cena:
Game Manager:
- Código:
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour {
public static GameManager Instance;
[Header("Audio")]
public Slider Audio;
public Toggle Option1;
public Toggle Option2;
public AudioSource Menu;
public AudioSource Calm;
void Awake() {
if (Instance == null) {
Instance = this;
DontDestroyOnLoad(gameObject);
} else if (Instance != this) {
Destroy(gameObject);
}
}
public void SaveAudio() {
PlayerPrefs.SetFloat("Sound", Audio.value);
if (Option1.isOn) {
if (!Menu.isPlaying) {
Menu.Play();
}
Calm.Stop();
Menu.volume = Audio.value;
PlayerPrefs.SetInt("SoundOption", 0);
} else if (Option2.isOn) {
if (!Calm.isPlaying) {
Calm.Play();
}
Menu.Stop();
Calm.volume = Audio.value;
PlayerPrefs.SetInt("SoundOption", 1);
}
}
}
Menu de Pausa:
- Código:
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class PauseMenu : MonoBehaviour {
public GameObject MenuPause;
public Image GameOverBackground;
private GameManager Audio;
private string ActualScene;
private bool Pause = true;
void Awake() {
GameOverBackground = FindObjectOfType<Image>();
Audio = GameObject.FindGameObjectWithTag("GameManager").GetComponent<GameManager>();
}
void Update() {
PauseAction();
}
void PauseAction() {
ActualScene = SceneManager.GetActiveScene().name;
if (ActualScene == "Jogo" && !GameOverBackground.enabled) {
if (Input.GetKeyDown(KeyCode.Escape) && Pause) {
Time.timeScale = 0;
MenuPause.SetActive(true);
if (Audio.Option1.isOn) {
Audio.Menu.Pause();
}
Pause = false;
} else if (Input.GetKeyDown(KeyCode.Escape) && !Pause) {
Time.timeScale = 1;
MenuPause.SetActive(false);
if (Audio.Option1.isOn) {
Audio.Menu.Play();
}
Pause = true;
}
}
}
public void Resume() {
Time.timeScale = 1;
MenuPause.SetActive(false);
Pause = true;
}
public void LoadMenu() {
SceneManager.LoadScene("Menu");
Time.timeScale = 1;
}
}
Retorna esse erro:
- Código:
NullReferenceException: Object reference not set to an instance of an object
PauseMenu.PauseAction () (at Assets/Scripts/PauseMenu.cs:27)
PauseMenu.Update () (at Assets/Scripts/PauseMenu.cs:18)
Alguém saberia informar por que a referência é perdida após recarregar a cena?
Grato pela atenção!
Inequalis- Iniciante
- PONTOS : 1659
REPUTAÇÃO : 1
Respeito as regras :
Re: Dúvida relacionada a comportamento de objetos
Você está criando uma nova instancia de GameManager na Linha 8 do Script PauseMenu.
Tenta acessar pelo Singleton que você criou, Exemplo:
Tenta acessar pelo Singleton que você criou, Exemplo:
- Código:
GameManager.Instancia.Option1.isOn = true;
Magnatah- Instrutor
- PONTOS : 3548
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Re: Dúvida relacionada a comportamento de objetos
Magnatah escreveu:Você está criando uma nova instancia de GameManager na Linha 8 do Script PauseMenu.
Tenta acessar pelo Singleton que você criou, Exemplo:
- Código:
GameManager.Instancia.Option1.isOn = true;
Entendo. Fiz essa alteração aqui:
- Código:
void PauseAction() {
ActualScene = SceneManager.GetActiveScene().name;
if (ActualScene == "Jogo" && !GameOverBackground.enabled) {
if (Input.GetKeyDown(KeyCode.Escape) && Pause) {
Time.timeScale = 0;
MenuPause.SetActive(true);
if (GameManager.Instance.Option1.isOn) {
GameManager.Instance.Menu.Pause();
}
Pause = false;
} else if (Input.GetKeyDown(KeyCode.Escape) && !Pause) {
Time.timeScale = 1;
MenuPause.SetActive(false);
if (GameManager.Instance.Option1.isOn) {
GameManager.Instance.Menu.Play();
}
Pause = true;
}
}
}
Mas o resultado é o mesmo: Após recarregar a cena, o mesmo erro persiste.
Inequalis- Iniciante
- PONTOS : 1659
REPUTAÇÃO : 1
Respeito as regras :
Re: Dúvida relacionada a comportamento de objetos
O Objeto com o Script GameManager está com tudo Linkado?
Magnatah- Instrutor
- PONTOS : 3548
REPUTAÇÃO : 209
Idade : 24
Áreas de atuação : Dєรєиvσlvєdσя Wєb(Fяσит-єиd), Blєиdєя, υиiтy, C#, ρнρ є Jαvαรcяiρт.
Respeito as regras :
Tópicos semelhantes
» Duvida(tamanho de objetos)
» [Duvida]Relacionada a RayCast
» [Duvida] Relacionada a rotação de um objeto.
» (Dúvida) Photon destruir objetos
» Duvida Objetos
» [Duvida]Relacionada a RayCast
» [Duvida] Relacionada a rotação de um objeto.
» (Dúvida) Photon destruir objetos
» Duvida Objetos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos