Я попытался заставить игровой объект игрока корабля перейти к следующей сцене, если все враги будут убиты и выиграли игру. Я получаю сообщение об ошибке в консоли Unity:
Assets \ Scripts \ GameController.cs (57,25): ошибка CS0122: «SceneLoader.LoadNextScene ()» недоступен из-за уровня защиты.
В настоящее время я могу перейти к следующей сцене только при изменении значения в этой строке:
SceneManager.LoadScene(1);
to (2) в сцене Loader.cs Я добавил код к игровому контроллеру здесь: общедоступный метод WinGame () void, любая обратная связь с тем, что означает эта ошибка, и как я могу ее исправить, приветствуется. :)
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
[SerializeField] float levelLoadDelay = 2f;
private int currentSceneIndex = -1;
private void Awake()
{
currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
}
private void Start()
{
if (currentSceneIndex == 0)
{
Invoke("LoadFirstScene", 2f);
}
private void LoadNextScene()
{
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
int nextSceneIndex = currentSceneIndex + 1;
SceneManager.LoadScene(nextSceneIndex);
}
public void LoadFirstScene()
{
SceneManager.LoadScene(1);
}
}
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.UI;
public class GameController : MonoBehaviour
{
public Text scoreText;
public Text restartText;
public Text gameOverText;
[SerializeField] private Text outcome;
[SerializeField] private PlayableDirector masterTimelinePlayableDirector;
[SerializeField] private GameObject playerShip;
private bool winGame = false;
private bool gameOver = false;
private int score;
private int enemiesLeft = 0;
private SceneLoader sceneLoader;
public bool allEnemiesKilled;
public float enemiesInScene = 10.0f;
public float enemiesKilled;
void Start()
{
sceneLoader = FindObjectOfType<SceneLoader>();
enemiesLeft = GameObject.FindObjectsOfType<Enemy>().Length;
restartText.text = "";
gameOverText.text = "";
outcome.text = "";
score = 0;
UpdateScore();
}
void Update()
{
if (gameOver)
{
if (Input.GetKeyDown(KeyCode.R))
{
sceneLoader.LoadFirstScene();
}
}
if (PlayerHealth.cur_health <= 0)
{
GameOver();
}
}
public void WinGame()
{
if (enemiesKilled < enemiesInScene)
{
allEnemiesKilled = true;
}
sceneLoader.LoadNextScene();
}
public void DecreaseEnemyCount()
{
enemiesLeft--;
}
public void AddScore(int newScoreValue)
{
score += newScoreValue;
UpdateScore();
}
void UpdateScore()
{
scoreText.text = "Score: " + score;
}
public void GameOver()
{
gameOver = true;
gameOverText.text = "Game Over!";
if (enemiesLeft > 0)
{
outcome.text = "You Lose";
}
else
{
outcome.text = "You Win";
}
restartText.text = "Press 'R' for Restart";
masterTimelinePlayableDirector.Stop();
playerShip.SetActive(false);
}
}