Как я могу заставить Рекорд обновляться и оставаться прежним до тех пор, пока его не победят - PullRequest
0 голосов
/ 03 июня 2018

Google Диск проекта

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameControl : MonoBehaviour 
{
    public static GameControl instance;         //A reference to our game control script so we can access it statically.
    public Text scoreText;                      //A reference to the UI text component that displays the player's score.
    public Text highscoreText;                  //A reference to the UI text component that displays the player's highscore.
    public GameObject gameOvertext;             //A reference to the object that displays the text which appears when the player dies.

    private int highScore = 0;                  //The games highscore
    private int score = 0;                      //The player's score.
    public bool gameOver = false;               //Is the game over?
    public float scrollSpeed = -1.5f;

    void Start()
    {
        highScore = PlayerPrefs.GetInt("HighScore");
        highscoreText.text = "HighScore: " + highScore.ToString();
    }

    void Awake()
    {
        //If we don't currently have a game control set this one to be it otherwise destroy this one
        if (instance == null)
            instance = this;
        else if(instance != this)
            Destroy (gameObject);
    }

    void Update()
    {
        //If the game is over and the player has pressed some input
        if (gameOver && Input.GetMouseButtonDown(0)) 
        {
            //reload the current scene.
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
        }


    }

    public void BirdScored()
    {
            //The bird can't score if the game is over.
            if (gameOver)
                return;

            //If the game is not over, increase the score and set highscore
            score++;

            //adjust the score text.
            scoreText.text = "Score: " + score.ToString();

            // Check if this score beats the highscore
            //if (score > highScore)
            //{
            //    highScore = score;
            //    PlayerPrefs.SetInt("HighScore", highScore);
            //}
            //highscoreText.text = "HighScore: " + highScore.ToString();

    }

    public void BirdDied()
    {

            //Activate the game over text.
            gameOvertext.SetActive(true);
            //The game is over.
            gameOver = true;

        // Check if this score beats the highscore
        if (score > highScore)
        {
            highScore = score;
            PlayerPrefs.SetInt("HighScore", highScore);
        }
            highscoreText.text = "HighScore: " + highScore.ToString();
    }
}

Я ищу отображение рекорда и обновление, когда игрок умирает.Базовая оценка работает правильно, но я не могу обновить рекорд.Если бы кто-то мог помочь мне с этим, это было бы очень ценно.Если вам нужно увидеть другой код, дайте мне знать, что вы думаете, и горячо, чтобы пойти по этому поводу.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вам необходимо отделить логику игрового состояния от логики состояния вне игры.

Например, один из моих проектов имеет статический 1 класс для хранения всей статистики 2 Я заинтересован в том, чтобы не полагаться на компонент MonoBehaviour.Этот класс статистики также обрабатывает сериализацию и десериализацию для статистики, хотя это не обязательно.

Я также создал специальный HighScore класс для обработки значений, которые могут бытьсбросить, но я все еще хочу знать, какое было «лучшее» значение, которое когда-либо хранилось.

Не собираюсь говорить, что мой код лучший, просто вот принципы, которым вы должны следовать.

1 Статические поля также позволяют мне получать доступ к этим свойствам из любого места.
2 Все они по-прежнему значения игрового состояния для этого конкретного проекта, но они будутвсе еще сохраняются, если бы я сменил сцену

0 голосов
/ 03 июня 2018

Выполнение каких-либо действий в этом направлении должно работать идеально.

public void BirdDied()
{
    //Activate the game over text.
    gameOvertext.SetActive(true);
    //The game is over.
    gameOver = true;

    // Check if this score beats the highscore
    if (score > highScore)
    {
        highScore = score;
        PlayerPrefs.SetInt("HighScore", highScore);
    }

    highscoreText.text = "HighScore: " + highScore.ToString();
}

Также обязательно получите рекорд и обновите highScoreText при запуске игры

void Start()
{
    highScore = PlayerPrefs.GetInt("HighScore");
    highscoreText.text = "HighScore: " + highScore.ToString();
}

РЕДАКТИРОВАТЬ: Обновленный ответ

РЕДАКТИРОВАТЬ После просмотра вашего проекта я заметил, что HighscoreText не установлен в инспекторе, см. Изображение enter image description here

Просто перетащите HighScoreText (находится в разделе «Холст» в представлении «Иерархия») в поле «Рекорд» в Инспекторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...