Сводка Жизнь моих игроков не сбрасывается до значения по умолчанию, когда они начинают игру заново или переходят на следующий уровень. Когда я умру один раз, а затем завершить первый уровень. Второй уровень загружается, и я начинаю с 2 жизнями. Когда я умру 3xs, он загружает главное меню, и когда я нажимаю на кнопку пуска, он запускает меня с 1 жизни.
LayOut: Unity Hierarchy LayOut
Цель:
Чтобы сбросить жизни игрока на 3 при возобновлении / начале игры / следующего уровня.
Ожидаемые результаты:
Когда игрок завершает уровень с двумя оставшимися жизнями. Следующий уровень должен загрузить, показывая, что у игрока есть 3 жизни.
Фактические результаты:
Когда игрок завершает уровень с двумя оставшимися жизнями. Следующий уровень показывает, что у игрока есть 2 жизни вместо 3.
Сообщения об ошибках: НЕТ
Что я пробовал Я потерял этоя впервые создаю игру. Где игрок имеет несколько жизней.
КОД SpaceShip:
public void completeSequence()
{
player = playerState.Transcending;
SFX.Stop();
SFX.PlayOneShot(completed);
death.Stop();
victory.Play();
Invoke("loadNextLevel", lvlLoadDelay);
}
public void resetLvl()
{
//print("Dead");
player = playerState.Dying;
SFX.Stop();
SFX.PlayOneShot(dead);
death.Play();
Invoke("loadCurrentSccene", lvlLoadDelay);
}
public void deadSequence()
{
//print("Dead");
player = playerState.Dying;
SFX.Stop();
SFX.PlayOneShot(dead);
death.Play();
Invoke("loadMainLevel", lvlLoadDelay);
}
public void loadCurrentSccene()
{
var currentScene = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentScene);
}
public void loadMainLevel()
{
SceneManager.LoadScene(0);
}
public void loadNextLevel()
{
int currentScene = SceneManager.GetActiveScene().buildIndex;
//print(currentScene);
int nextScene = currentScene +1;
SceneManager.LoadScene(nextScene);
}
public void loadPreviousLevel()
{
int currentScene = SceneManager.GetActiveScene().buildIndex;
int nextScene = currentScene -1;
SceneManager.LoadScene(nextScene);
}
}
Код GameSession:
{
[SerializeField] int playerLives = 3;
[SerializeField] Text livesText;
private void Awake()
{
int numSessions = FindObjectsOfType<gameSession>().Length;
if (numSessions > 1)
{
Debug.Log("I am the NOT Original");
Destroy(gameObject);
}
else
{
Debug.Log("I am the Original");
DontDestroyOnLoad(gameObject);
}
}
// Start is called before the first frame update
void Start()
{
livesText.text = playerLives.ToString();
}
public void initiateDeath()
{
if (playerLives > 1)
{
reduceLives();
}
else
{
FindObjectOfType<spaceShip>().deadSequence();
}
}
public void reduceLives()
{
playerLives--;
FindObjectOfType<spaceShip>().resetLvl();
livesText.text = playerLives.ToString();
}
}