Создайте текст пользовательского интерфейса в течение нескольких секунд на Unity

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

У меня есть элемент, который, когда игрок взаимодействует с ним, выполняет следующее:

void Update ()
{
     if (isPlayerNear && Input.GetKeyDown(KeyCode.E) && Avatar.strenghtAttribute >= 2f)
    {
        levelUp.LevelUp();
        Destroy(gameObject);
    } 

Моя функция повышения уровня в основном такова:

public void LevelUp()
{
     playerLevelText.text = ("You have gained a level!");
     strenghtAttribute++;
     intellectAttribute++;
     playerLevel++;
}

Я пытаюсь понять, как сделать playerLevelText.Text появляться на экране, но появляться только на несколько секунд, и я не могу понять, как это сделать. Кто-нибудь будет достаточно любезен, чтобы дать мне руку?

Всего 1 ответ


Вы можете либо установить пустой текст, либо включить / отключить текстовый объект. Я бы рекомендовал использовать сопрограмму для этого.

void Update ()
{
    if (isPlayerNear && Input.GetKeyDown(KeyCode.E) && Avatar.strenghtAttribute >= 2f)
    {
        levelUp.InitializeLevelUp());
        Destroy(gameObject);
    } 

Поскольку вы уничтожаете игровой объект, вызывающий сопрограмму coroutine, сопрограмма остановится. Обходным путем является вызов нормальной функции в другом скрипте, который затем вызывает сопрограмму, поэтому выполнение остается в пределах одного скрипта (возможно, это будет более чистый способ сделать это).

public void InitializeLevelUp()
{
    StartCoroutine(LevelUp());
}
public IEnumerator LevelUp()
{
     playerLevelText.text = ("You have gained a level!");
     strenghtAttribute++;
     intellectAttribute++;
     playerLevel++;
     yield return new WaitForSeconds(2f);
     playerLevelText.text = "";
     //alternatively, set the text object inactive   
}

Есть идеи?

10000