Задать вопрос
@kroliczek

Как сделать чтобы платформа ждала в конечной и стартовой точке заданное время?

Есть движущаяся платформа, она двигается из стороны в сторону от одной точки к другой, нужно чтобы она после приезда на точку ждала по таймеру несколько секунд, я не пойму где нужно перезадавать таймер :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;
            }
       }
           
    }
}
  • Вопрос задан
  • 80 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DrRen7
using System.Collections;
using UnityEngine;

public class JumpPad : MonoBehaviour
{
    [SerializeField]GameObject _platform;
    [SerializeField] float _platformSpeed;
    bool _canMove;
    [SerializeField] float _timeToMove;
    [SerializeField]Vector3 _nextPos;
    private void Update()
    {
        if (_canMove) MovePlatform(_nextPos);
    }
    public void SetGo()
    {
        StartCoroutine(SetGoCor());
    }
    IEnumerator SetGoCor()
    {
                                                                  //тут можно сменить таргет примерно что у тебя есть 
///if(platform.transform.position == startPoint.position) _targetPos=endPoint.position;
//else _targetPos=startPoint.position;
        yield return new WaitForSeconds(_timeToMove);
        _canMove=true; 
    }

    void MovePlatform(Vector3 targetPos)
    {
        if (_platform.transform.position != targetPos)
        {
            _platform.transform.position = Vector3.MoveTowards(_platform.transform.position, targetPos, _platformSpeed * Time.deltaTime);
        }
        else {
_canMove = false;
SetGo();
}
    }

}


есть ещё команда Invoke которая запускает метод через определенное время но в ней есть проблема с тем что ты передаешь имя метода через string что может потом привести в ошибке если что то будет переделываться
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы