Member 14135033 Ответов: 1

Как мне запустить таймер в моей функции запуска вместо обновления()


У меня есть переход с некоторыми дверями закрывающимися когда вы нажимаете btn для Lv1,

Я понимаю что таймер находится в методе обновления так что когда он достигнет 0 он загрузит мой уровень

Однако я пытаюсь сказать, когда мой
private void StartDoor()
функция

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

не запускайте этот таймер сразу же после запуска этого скрипта.

Я действительно ценю любую оказанную помощь и не чувствителен к критике или обратной связи.

Что я уже пробовал:


using UnityEngine;
using Spine.Unity;
using Spine;
using UnityEngine.SceneManagement;

public class DoorTransition : MonoBehaviour
{

    public SkeletonAnimation SkelAnim;

    [SpineAnimation]
    public string DoorClose;
    
    [SerializeField]
    private float delayBeforeLoading = 10f;
   

   

    void Awake()
    {
    SkelAnim = GetComponent<SkeletonAnimation>();
    }


    private void StartDoor()
    {
    SkelAnim.state.SetAnimation(0, DoorClose, false);

    if (delayBeforeLoading <=0)

    SceneManager.LoadScene("LevelOne");
    
    }

    private void Update()
    {

    delayBeforeLoading -= Time.deltaTime;
    
    }


}

1 Ответов

Рейтинг:
1

Member 14135033

Это сработало для меня



using UnityEngine;
using Spine.Unity;
using Spine;
using UnityEngine.SceneManagement;

public class DoorTransition : MonoBehaviour
{

    public SkeletonAnimation SkelAnim;

    [SpineAnimation]
    public string DoorClose;
    bool TimerStarted = false;
    private float _timer = 0f;
    public float LoadLevelDelay = 1f;


    void Awake()
    {
        SkelAnim = GetComponent<SkeletonAnimation>();
    }


    private void StartDoor()
    {
        TimerStarted = true;

        SkelAnim.state.SetAnimation(0, DoorClose, false);
        }

    

    void Update()
    {
        if (TimerStarted)
        {
            _timer += Time.deltaTime;

            if (_timer >= LoadLevelDelay)
            {
                SceneManager.LoadScene("LevelOne");
            }

        }
    }
}