Как получается, что жизнь моего плеера не сбрасывается при каждой загрузке экрана? - PullRequest
1 голос
/ 06 ноября 2019

Сводка Жизнь моих игроков не сбрасывается до значения по умолчанию, когда они начинают игру заново или переходят на следующий уровень. Когда я умру один раз, а затем завершить первый уровень. Второй уровень загружается, и я начинаю с 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();
    }

}

1 Ответ

1 голос
/ 06 ноября 2019

В настоящее время playerLives инициализируется до 3 и уменьшается на единицу при вызове reduceLives(). Ни один из ваших кодов не устанавливает playerLives обратно на 3, поэтому при входе на новый уровень или при вызове deadSequence() жизни остаются на прежнем уровне.

Добавление метода сброса к GameSession и вызов этого значения всякий раз, когда вы хотите установить playerLives обратно на 3 (так, предположительно, внутри deadSequence() и completeSequence()), исправит эту проблему.

public void ResetLives()
{
    playerLives = 3;
    livesText.text = playerLives.ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...