Как отобразить данные таймера обратного отсчета в текстовом объекте в нескольких сценах? - PullRequest
0 голосов
/ 10 июля 2019

Когда игрок умирает, один индикатор здоровья отключается, и запускается таймер обратного отсчета, который длится 5 минут, а затем индикатор снова активируется.

Как отобразить таймер на разных сценах, чтобы у игрока был индикатор, чтобы увидеть, когда у него снова будут жизни, чтобы повторить попытку?Есть ли способ найти новый текстовый объект, когда сцена перезагружается или изменяется на другую сцену?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TimerText : MonoBehaviour
{
    public static TimerText instance;

    private Text timeText;

    [SerializeField]
    public GameObject heart;

    private float time;

    private void Awake()
    {
        MakeSingleton();
    }
    // Start is called before the first frame update
    void Start()
    {

        timeText = GameObject.Find("/Canvas/Resource_Life/Resource_Base /Timer").GetComponent<Text>(); ;
    }

    // Update is called once per frame
    void Update()
    {            
        if(heart.activeSelf == false && timeText.text == "<color=white>00:00</color>")
        {
            StartCoundownTimer();
        }
    }

    public void MakeSingleton()
    {
        if (instance != null)
        {
            Destroy(gameObject);
        }
        else
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
    }

    void StartCoundownTimer()
    {
        if (timeText != null)
        {
            time = 300;
            timeText.text = "00:00";
            InvokeRepeating("UpdateTimer", 0.0f, 0.01667f);
        }
    }

    void UpdateTimer()
    {
        if (timeText != null)
        {
            time -= Time.deltaTime;
            string minutes = Mathf.Floor(time / 60).ToString("00");
            string seconds = (time % 60).ToString("00");
            timeText.text = minutes + ":" + seconds;
            if (minutes == "00" && seconds == "00") 
            {
                heart.SetActive(true);
            }
        }
    }
}

Таймер обратного отсчета должен продолжаться и отображаться в новом текстовом объекте, который создается, если сценаперезагружен или изменен, вместо сообщения об ошибке «GameObject был уничтожен».

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