Я хочу сбросить уровень в Unity и тоже не сбрасывать переменную - PullRequest
0 голосов
/ 21 октября 2019

Я хочу сбросить уровень в Unity и не сбрасывать переменную количества монет и переменную счетчика проигрышей. Я использую playerprefs, но у меня тоже не работает сброс переменных.

public void EndGame()
{
    LoseCounter++;
    Invoke("Restart", restartDelay);      
}
public void Restart()
{
    savedata();
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    loaddata();
}
public void savedata()
{
    PlayerPrefs.SetInt("coinamount", ct.coinAmount);
    PlayerPrefs.SetInt("losecounter", LoseCounter);
    PlayerPrefs.Save();
}
public void loaddata()
{
    ct.coinAmount = PlayerPrefs.GetInt("coinamount");
    LoseCounter = PlayerPrefs.GetInt("losecounter");
}

script cointext

public int coinAmount;   
public Text text;
void Start()
{
    text = GetComponent<Text>();
}
void Update()
{
    text.text = coinAmount.ToString() + " coins";
}

Ответы [ 3 ]

1 голос
/ 21 октября 2019

Я второй, что Мухаммед Эллави сказал о загрузке данных в методе Start(). но, как правило, эти игровые данные обычно не должны быть частью сцены, например, вы можете захотеть реализовать шаблон синглтона , чтобы они не были частью сцены.

1 голос
/ 21 октября 2019

убедитесь, что вы вызываете loaddata () в методе Start ().

после вызова метода «Загрузить сцену» строки кода под ним не будут вызываться.

, поэтому убедитесь, что вы вызываете loaddata () в методе Start или OnEnable.

надеюсь, это поможет.

0 голосов
/ 21 октября 2019

Самый простой способ - сказать единице, чтобы не уничтожить вашего игрового менеджера: вызовите DontDestroyOnLoad (this.gameObject) в Awake of the monobehaviour, чтобы сохранить его живым после перезагрузки сцены.

https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

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