Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Вопросы Мои Вопросы

Где обнулять таймер?

UnityC#3D

Есть движущаяся платформа, она двигается из стороны в сторону от одной точки к другой, нужно чтобы она после приезда на точку ждала по таймеру несколько секунд, я не пойму где нужно перезадавать таймер :C
Вот код который ей управляет


private void DelayedMoveBetwenTwoPoints(){
        if(platform.transform.position == startPoint.position){
            nextPosition = endPoint.position;    
        }else if(platform.transform.position == endPoint.position){
            nextPosition = startPoint.position;
        }
        MoveWithDelay(nextPosition);
    }

Вот функция MoveWithDelay

private void MoveWithDelay(Vector3 destination){
        _timer.startTimer = true;
        if(_timer.timer <=0){
            MoveTo(destination);
            
        }
    }

И MoveTo

private void MoveTo(Vector3 destination){            
        platform.transform.position = Vector3.MoveTowards(platform.transform.position,destination, Time.deltaTime * travelTime);
    }

А так же таймер(Он находится в отдельном скрипте)


public class Timer : MonoBehaviour
{ 
    public bool startTimer = false;
    public float delay = 10;
    public float timer;
    void Start(){
    timer = delay;
    }
    void Update()
    {
        if(startTimer == true){
            timer = timer - Time.deltaTime;
            Debug.Log(timer);
            if(timer <=0){
                startTimer = false;
            }
       }
           
    }
}


Комментарии

3
31415 8 месяцев назад

Для таймеров я используюWaitForSeconds
тоесть примерно вот так
IEnumerator WaitPlatform()
{
yield return new WaitForSeconds(/*сколько секунд нужно ждать*/);
}
Чтобы вызвать его: напиши в нужном методе StartCoroutine(WaitPlatform());

PS в коде могут быть граматические ошибки(пишу с телефона)

MISSID 8 месяцев назад

31415, Все методы которые Двигают платформу и сравнивают координаты, вызываются в Update();
Я понятия не имею можно ли вызывать корутины в Update() :C
Сейчас сделал с корутиной, но она вызывается несколько раз и обнуляет сама себя

MISSID 8 месяцев назад

31415, вот код:


private void MoveWithDelay(Vector3 destination){
            float distance = Vector3.Distance(platform.transform.position,destination);
            bool _platformInPlace = distance <= 0.1f;
            if(!_platformInPlace){
                if(TimerStopped)MoveTo(destination);
            }else{
                TimerStopped = false;
                startTimer();               
            }
    }



private void startTimer(){
        StartCoroutine(DelayCor(timerLength));
    }


 private IEnumerator DelayCor(float delay){
        Debug.Log("Courutine Started");
        yield return new WaitForSeconds(delay);
        TimerStopped = true;

Гости не могут отвечать на вопросы. Войдите на Сайт или Зарегистрируйтесь