#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";
}