Я использую playerprefs для сохранения данных через сцены. Хотя у меня возникают проблемы с сохранением этих данных, когда приложение закрыто. Вы видите, что у меня есть магазин IAP, который дает игроку бумеранг, когда они его покупают, эффект бумеранга (сделанный внутри моего скрипта) активируется с помощью кнопки. Моя проблема в том, что playerprefs.haskey не сохраняет эффект бумеранга, когда я закрываю игру, а затем снова открываю ее. Хотя он сохраняет эффект бумеранга, когда он проходит через сцены. Это мой сценарий:Unity2D: PlayerPrefs.HasKey
public bool forceActive = false;
public GameObject BoomerangOn, BoomerangOff;
public static int buttonCount = 0;
static int timesActivated = 0;
void Start()
{
if (PlayerPrefs.HasKey ("boomerangbutton")) {
buttonCount = PlayerPrefs.GetInt ("boomerangbutton");
BoomerangEffect();
}
}
void Update()
{
PlayerPrefs.SetInt("boomerangbutton", buttonCount);
}
public void Activated()
{
if(timesActivated < BoomeerangText.score)
{
timesActivated++;
StartCoroutine(BoomerangEffect());
}
}
IEnumerator BoomerangEffect()
{
BoomerangOn.SetActive (true);
yield return new WaitForSeconds (10.0f);
BoomerangOn.SetActive (false);
BoomerangOff.SetActive (true);
yield return new WaitForSeconds (1f);
BoomerangOff.SetActive (false);
forceActive = false;
}
Второй Редактировать
Хорошо, я немного исследований и соединился эффект бумеранга скрипт с моим бумеранга текста сценария. Когда пользователь купит бумеранг из моего хранилища IAP, они получат 5 бумерангов, после нажатия на них текст бумеранга int войдет вниз (например, 5, 4, 3, 2 и 1), и так будет мой номер кнопки int (вот почему требуется время, требуемое). Однако изменить Активированную функцию:
public void Activated()
{
if (timesActivated < BoomeerangText.score) {
timesActivated++;
StartCoroutine (BoomerangEffect());
}
}
До сих пор он работает в отношении активации моего обратного эффекта, когда приложение закрыто, но когда дело доходит до последнего междунара (1) ничего не происходит, мой эффект не принимает место, пока это моя единственная проблема. Выше обновленная версия того, как выглядит мой код сейчас. А ниже мой бумеранг текст сценария:
public static int score = 0; // The player's score.
public static int click = 1;
public GameObject button;
Text text; // Reference to the Text component.
// Use this for initialization
void Start()
{
if (PlayerPrefs.HasKey ("boomerangTextInt")) {
score = PlayerPrefs.GetInt("boomerangTextInt");
}
}
void Awake()
{
text = GetComponent<Text>();
}
public void Update()
{
SetScoreText();
PlayerPrefs.SetInt("boomerangTextInt", score);
}
void SetScoreText()
{
text.text = " " + score;
if (score <= 0)
{
text.text = "None";
button.GetComponent<Button>().interactable = false;
}
else if (score >= 1)
{
button.GetComponent<Button>().interactable = true;
}
// Set the displayed text to be the word "Score" followed by the score value.
}
public void MinusBoomerangText()
{
score -= click;
text.text = " " + score;
}
}
И в моей покупки сценария у меня есть это:.
public int scoreValue = 5;
if (String.Equals(args.purchasedProduct.definition.id, PRODUCT_5_BOOMERANG, StringComparison.Ordinal))
{
BoomerangEffect.buttonCount += 5;
BoomerangText.score += scoreValue;
Debug.Log("Purchase successfull");
}
Спасибо :)
Подобно тому, как наблюдение - возможно, вы должны только писать в свои «PlayerPrefs», когда изменяется данное значение, а не каждый вызов «Update()» (что кажется очень чрезмерным). – Serlite