Сохранение счета, затем использование его в рекорде - PullRequest
0 голосов
/ 17 июня 2020

У меня есть сценарий, который дает вам 1 очко каждую 1 секунду.

Мне было интересно, как сохранить результат в качестве рекорда. Я знаю о PlayerPref, но не могу об этом думать. Я также пробовал несколько других объяснений.

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class score : MonoBehaviour
{
    private Text scoreText;
    private float PIPS;
    public GameObject gameOverScore;
    public GameObject Player;
    public static float scoreAmount;

    public void Start()
    {
        scoreText = GetComponent<Text>();
        scoreAmount = 0.0f;
        PIPS = 1.0f;
    }

    public void Update()
    {
        if (Player.activeInHierarchy == true)
        {
            scoreText.text = scoreAmount.ToString("F0");
            scoreAmount += PIPS * Time.deltaTime;
        }
        else
        {
            scoreText.enabled = false;
            gameOverScore.GetComponent<TextMeshProUGUI>().text = scoreAmount.ToString("F0");
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Вот экземпляр одного из моих сценариев ->

int HighScore = PlayerPerfs.GetInt("HighScore", 0) //If playing First Time Score = 0
void Save()
    {
        if(ScoreUpdate.CurrentScore > HighScore) //Check if CurrentScore is more than HighScore
        {
            PlayerPrefs.SetInt("HighScore", ScoreUpdate.CurrentScore);//Save New High Score
        }
    }

Теперь вам просто нужно вызвать эту функцию Save() всякий раз, когда игра завершается или игрок умирает (если умирает в любой момент)

Изменить: заменить ваши переменные вместо ScoreUpdate

0 голосов
/ 17 июня 2020

Хотя это не лучший способ, вы можете использовать playerprefs в Awake и OnDisable ().

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class score : MonoBehaviour
{
private Text scoreText;
private float PIPS;
public GameObject gameOverScore;
public GameObject Player;
public static float scoreAmount;
public float HighScore;

public void Start()
{
    scoreText = GetComponent<Text>();
    scoreAmount = 0.0f;
    PIPS = 1.0f;
}

private void OnDisable()
{
    // this will save the highscore in playerprefs when the game ends[application quit].

    PlayerPrefs.SetFloat("HighScore", HighScore);
}

private void Awake()
{
    // this will load the highscore from playerprefs
    HighScore = PlayerPrefs.GetFloat("HighScore");
}

public void Update()
{
    if (Player.activeInHierarchy == true)
    {
        scoreText.text = scoreAmount.ToString("F0");
        scoreAmount += PIPS * Time.deltaTime;
        if (scoreAmount > HighScore)
        {
            HighScore = scoreAmount;
        }
    }
    else
    {
        scoreText.enabled = false;
        gameOverScore.GetComponent<TextMeshProUGUI>().text = scoreAmount.ToString("F0");
    }
}
}

дайте мне знать, если это поможет.

...