Рекорд с PlayerPref c#

#c# #unity3d

#c# #unity3d

Вопрос:

Итак, я недавно начал программировать, и это мой первый проект на C # и Unity тоже. Итак, мой вопрос, вероятно, легко решить, и могут быть некоторые серьезные ошибки. Итак, я открыт для идей или объяснений.

Итак, я попытался создать скрипт, который сохранял бы мои рекорды в PLAYERPREF и отображал их во время воспроизведения моего 2D endless runner. (Аналогично dinogame в Chrome) «Нормальная» оценка сработала, но, похоже, я не могу заставить показать рекорд. Кто-нибудь знает, где я ошибся или как я мог бы сделать это простым способом?

У меня уже есть изображение текст на моем canvas (как я видел его онлайн для обычного отображения результатов), и я добавил его, и это (ниже) мой код для рекордов. Я не смог найти никаких объяснений для решения этой проблемы в Интернете, если вы знаете какие-либо источники, я был бы рад прочитать и узнать больше.

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SocialPlatforms.Impl;
using UnityEngine.UI;

public class HighScore : MonoBehaviour
{
    public Text HighscoreText;

    
    private void Start()
    {
       
    }
  
    void StoreHighscore(int newHighscore)
    {
        int oldHighscore = PlayerPrefs.GetInt("Highscore",0);
        if (newHighscore > oldHighscore)
        {
            PlayerPrefs.SetInt("Highscore", newHighscore);
    
        }

    }

    void Update()
    {
     HighscoreText.text = PlayerPrefs.GetInt("newHighscore")   " Highscore";   
    }
}
  

Я добавил PlayerPref.Save() в свой скрипт GameOver. Чтобы сохранить PlayerPrefs перед перезагрузкой сцены в качестве GameOver.

Спасибо

Комментарии:

1. Я думаю, проблема возникает из-за того, что void Update() вы пытаетесь получить PlayerPrefs.GetInt("newHighscore") , но вы установили Highscore выше, а не newHighscore .

2. Что касается общего дизайна, вы должны отметить, что void Update() функция вызывается каждый кадр в вашей игре (таким образом, вы обновляете текст примерно 60 раз в секунду, хотя он меняется не так часто. Вместо этого вам лучше назначить новый текст прямо в, void StoreHighscore(int newHighscore) когда условие newHighscore > oldHighscore выполнено.

3. Кроме того, нет необходимости усложнять хранение рекордов. Вы можете создать обычную переменную рядом public Text HighscoreText; , но это было бы public int Highscore; , вместо этого обновите ее. Вы также можете сделать это свойством C #, чтобы вместо StoreHighscore функции у вас было свойство, которое прозрачно обрабатывало бы обновление текста прямо при set нем.

Ответ №1:

 void Update()
    {
     HighscoreText.text = PlayerPrefs.GetInt("newHighscore")   " Highscore";   
    }
  

Простая ошибка, вы только что пытались получить PlayerPref с ключом «newHighscore», но этот ключ не существует с тех пор, как вы использовали PlayerPrefs.SetInt вы передали ключ «Рекорд».

Чтобы решить эту проблему, просто попробуйте получить правильный ключ:

 void Update()
        {
         HighscoreText.text = PlayerPrefs.GetInt("Highscore")   " Highscore";   
        }