#c# #unity3d
#c# #unity3d
Вопрос:
Я начал изучать кодирование самостоятельно, просматривая видео, читая веб-статьи и т. Д. И я подумал, что обучение на практике подойдет мне лучше, Поэтому я начал создавать игру с Unity с помощью обучающих видеороликов Brackeys.
using UnityEngine.SceneManagement;
using UnityEngine;
public class gameManager : MonoBehaviour
{
bool hasGameEnded = false;
public float restartDelay = 1f;
public void endGame()
{
if (hasGameEnded == false)
{
hasGameEnded = true;
Invoke("Restart", 2f);
}
void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
Итак, моя проблема здесь в том, что когда я использую invoke с перезапуском метода, ни один из вызовов не работает.
«Предупреждение CS8321 Локальная функция’Restart’ объявлена, но никогда не использовалась», — вот ошибка, которую я получаю.
При желании я могу показать, где и как я использовал метод endGame. Спасибо за любую помощь.
Комментарии:
1. Вы объявили
Restart
как метод ВНУТРИendGame
метода. Попробуйте переместить его оттуда (в класс). И при вызовеInvoke
Restart не должно быть в кавычках.2. Пол Бак дал вам правильный ответ. Я просто хотел сказать, что вы получили предупреждение, а не ошибку. Код все равно будет компилироваться с предупреждениями и выполняться, но не всегда будет работать. Мой совет — продолжайте рассматривать их как ошибки и исправляйте их, не слушайте «экспертов», которые говорят, что вы можете игнорировать предупреждения, потому что, как вы только что обнаружили, это не всегда так 🙂
3. Спасибо за добрые ответы. Я сделал то, что вы и Мохаммад сказали, и это сработало так, как должно. Единственное, что Поул сказал неправильно, что перезапуск должен быть в кавычках. Я попробовал это без кавычек, и это не сработало, и, конечно, Gorilla, я не буду игнорировать предупреждения, даже если это всего лишь одно предупреждение. Спасибо за ваш долгосрочный совет!
Ответ №1:
Если Void
он был внутри другого Void
, он не будет работать.
Итак, вам нужно изменить :
using UnityEngine.SceneManagement;
using UnityEngine;
public class gameManager : MonoBehaviour
{
bool hasGameEnded = false;
public float restartDelay = 1f;
public void endGame()
{
if (hasGameEnded == false)
{
hasGameEnded = true;
Invoke("Restart", 2f);
}
void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
}
Для :
using UnityEngine.SceneManagement;
using UnityEngine;
public class gameManager : MonoBehaviour
{
bool hasGameEnded = false;
public float restartDelay = 1f;
public void endGame()
{
if (hasGameEnded == false)
{
hasGameEnded = true;
Invoke("Restart", 2f);
}
}
void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
Комментарии:
1. Спасибо за ваше примерное решение и объяснение!