Невозможно установить текст пользовательского интерфейса из другого скрипта в Unity - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть игровой объект «Текст», который представляет собой текстовый интерфейс. Он имеет скрипт (Scores.cs), который в основном увеличивает переменную оценки (public) на основе некоторого уравнения.

Теперь я хочу установить для него текст из другого скрипта "GameManager.cs", снова говоря "Game Over", основываясь на некоторых сценариях.

Я не могу этого сделать.

Scores.cs

using UnityEngine;
using UnityEngine.UI;
    public class Scores : MonoBehaviour {

        public Transform player;
        public Text scoreText;

        // Update is called once per frame
        void Update () {
            scoreText.text = player.position.z.ToString("0");
        }
    }

GameManager.cs

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GameManager : MonoBehaviour {

    bool gameEnded = false;
    public Text scoreText; // Also referrenced this variable with Text Object in the inspector


    public void EndGame() {
        if(gameEnded == false) {
            scoreText.text = "Game over";
            gameEnded = true;
        }
    }
}

Когда я устанавливаю ScoreText с помощью ScoreText.text, он корректно устанавливается на «Игра окончена» после того, как я увидел это при отладке, , но он никогда не обновляет пользовательский интерфейс игры .

Когда я отлаживаю ScoreText.text внутри EndGame (), я получаю соответствующую оценку. Я могу получить счет, но не могу его установить.

1 Ответ

0 голосов
/ 17 сентября 2018

См. Эту часть кода в вашем Scores.cs:

//Update is called once per frame
void Update () 
{
    scoreText.text = player.position.z.ToString("0");
}

Прочитайте комментарий, сгенерированный Unity.Это говорит о том, что функция Update вызывается каждый кадр.По сути, вы устанавливаете его в функции EndGame на «Игра окончена» , а затем перезаписываете его значение в функции Update в следующем кадре, когда вы сделали scoreText.text = player.position.z.ToString("0");.Вы должны удалить это или добавить логическую переменную для контроля, когда вы сможете установить ее в функции Update или нет.

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