как я могу сохранить свой счет игрока в новой сцене? - PullRequest
0 голосов
/ 06 января 2019

У меня есть простой скрипт для подсчета очков игрока, как я могу взять это значение и отобразить его в игре на сцене?

Это мой сценарий:

public class scoreScript : MonoBehaviour {

 public static int scoreValue = 0;
 Text score;

 // Use this for initialization
 void Start () {
     score = GetComponent<Text>();
 }

 // Update is called once per frame
 void Update () {
     score.text = "Score:" + scoreValue;
 }

}

Ответы [ 4 ]

0 голосов
/ 06 января 2019

Сохраните его в PlayerPrefs при выходе из текущей сцены и сохраните в playerpref как:

PlayerPrefs.Setint(" CurrentScore",scoreValue);

затем восстановите его в новой сцене:

scoreValue = PlayerPrefs.Getint(" CurrentScore");
0 голосов
/ 06 января 2019

Когда вы загружаете новую сцену, gameObject, который несет "ScoreScript", теряется. Чтобы перенести тот же игровой объект в новую сцену (что имеет смысл, чтобы не потерять информацию, которую несет скрипт), вам необходимо использовать метод «DontDestroyOnLoad». Вы просто вызываете метод в методе Awake своего монобиха, и тогда ваш игровой объект (вместе с данными в вашем скрипте) продолжит загрузку новой сцены. Вот соответствующая документация: https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

и вот пример кода:

public class scoreScript : MonoBehaviour {
    public static int scoreValue = 0;
    Text score;

    void Awake(){
        DontDestroyOnLoad(this.gameObject);
    }

    void Start () {
        score = GetComponent<Text>();
    }

    void Update () {
        score.text = "Score:" + scoreValue;
    }
}
0 голосов
/ 06 января 2019

Вы уже сделали это public static, все, что осталось, это написать в своей игре поверх сценария текстового поля сцены:

gameOverText.text = "Score: " + scoreScript.scoreValue;

при условии, что gameOverText является Text.

Вам не нужно создавать экземпляр для доступа к статическому члену, вы должны обращаться к ним, используя имя класса (scoreScript в вашем случае).

Однако нехорошо смешивать хранение глобального счета и текстовое поле для отображения его в одном классе, потому что по мере добавления новых функций в игру все глобальные переменные будут находиться в разных классах, и вы будете уделять все большее внимание при изменении вашего кода. Чтобы избежать этого, вы можете использовать статический класс в качестве «ядра», где хранятся все глобальные переменные. Впервые это будет сделано.

DontDestroyOnLoad работает с GameObject с, поэтому они не будут уничтожены при загрузке новой сцены. Если вы назовете его в своем скрипте, счет вашего GameObject останется, как и текстовое поле, потому что оно является составной частью этого объекта и будет присутствовать в игре на сцене, поэтому не делайте этого.

0 голосов
/ 06 января 2019

Просто, просто назовите «scoreScript.scoreValue» в любом скрипте, который вы хотите в игре на сцене

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