Скрипт работает без ошибки, но в игре ничего не происходит
Записал вопрос на видео. Суть такова. В игре кнопка RESTART (к которой привязана функция GameRestart) делает тоже самое что и кнопка MENU (к которой привязана функция GameMenu), хотя должна еще и отрабатывать функцию GameStart (которая, в свою очередь, привязана к кнопке START и которая успешно работает). В функции GameStart присутствует Debug.Log и он отрабатывает по обеим кнопкам (START и RESTART). Никаких ошибок в Unity не выскакивает. Теперь я знаю, что нужно делать отдельные сцены под меню и игру/игровые уровни, но пока, хочется понять, почему кнопка RESTART не отрабатывает как надо. Сам скрипт:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class GameController : MonoBehaviour
{
public static GameController instance;
public GameObject menuPanel;
public GameObject gamePausePanel;
public Button resumeButton;
public Text scoreLabel;
public Text liveLabel;
public Text gameOverLabel;
public Text recordLabel;
AudioSource goMusic;
int score = 0;
int live = 3;
public int recordScore;
public bool isStarted = false;
public bool isPaused = false;
void Start()
{
instance = this;
menuPanel.SetActive(true);
goMusic = GetComponent<AudioSource>();
goMusic.Play();
goMusic.Pause();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape) && isStarted && live > 0)
{
if (isPaused == false)
{
GamePause();
}
else
{
GameResume();
}
}
if (live < 1)
{
Destroy(GameObject.FindGameObjectWithTag("Player"));
gamePausePanel.SetActive(true);
gameOverLabel.gameObject.SetActive(true);
resumeButton.gameObject.SetActive(false);
goMusic.UnPause();
Time.timeScale = 0.5f;
}
recordLabel.text = ("RECORD: " + PlayerPrefs.GetInt("HightScore"));
recordScore = score;
if(PlayerPrefs.GetInt("HightScore") <= recordScore)
{
PlayerPrefs.SetInt("HightScore", recordScore);
}
}
public void GameStart()
{
menuPanel.SetActive(false);
isStarted = true;
Time.timeScale = 1f;
Debug.Log("GameStart otrabotal");
}
public void GamePause()
{
gamePausePanel.SetActive(true);
resumeButton.gameObject.SetActive(true);
gameOverLabel.gameObject.SetActive(false);
isPaused = true;
Time.timeScale = 0f;
}
public void GameResume()
{
gamePausePanel.SetActive(false);
isPaused = false;
Time.timeScale = 1f;
}
public void GameRestart()
{
GameMenu();
GameStart();
//SceneManager.LoadScene("Space_Fighter");
//menuPanel.SetActive(false);
//isStarted = true;
//Time.timeScale = 1f;
}
public void GameMenu()
{
SceneManager.LoadScene("Space_Fighter");
}
public void GameQuit()
{
Application.Quit();
}
public void IncrementLive(int increment)
{
live += increment;
liveLabel.text = live + " :LIVE";
}
public void IncrementScore(int increment)
{
score += increment;
scoreLabel.text = "SCORE: " + score;
}
}
Ответы (1 шт):
Автор решения: Yevgen Tereshuk
→ Ссылка
public void GameRestart()
{
GameMenu(); // Загружается новая сцена, GameStart уже не сработает
GameStart();
}