Как сделать движение объекта вверх на определённое количество секунд при срабатывании триггера?

176
21 июля 2019, 03:40

Пробовал уже многие варианты, но ничего не работает. Вот последняя догадка:

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ElevatorScript : MonoBehaviour
{
    public GameObject elev;
    public Vector3 moveVector = Vector3.up;
    public float speed;
    public float ttime;
    float uspeed = 0;
    void OnTriggerEnter(Collider col)
    {
        if(col.tag == "Player")
        {
            StartCoroutine(ControlDirection(ttime));
        }
    }
    IEnumerator ControlDirection(float ietime)
    {
        while(true)
        {
            yield return new WaitForSeconds(ietime);
            uspeed = speed;
        }
    }
    // Start is called before the first frame update
    void Start()
    {
    }
    // Update is called once per frame
    void Update()
    {
        elev.transform.Translate(moveVector * uspeed * Time.deltaTime);
    }
}
Answer 1

Вы, в принципе, верной дорогой шли. Вот вам пример корутины, которая может сделать то, что вам нужно:

IEnumerator ControlDirection(float moveTime)
{
    float timeLeft = 0;
    while(timeLeft <= moveTime)
    {
        timeLeft += Time.deltaTime;
        elev.transform.Translate(moveVector * uspeed * Time.deltaTime);
        yield return null;
    }
}

Т.е. мы присылаем в корутину время, в течении которого наш герой должен двигаться. Внутри неё запускается цикл, который будет продолжаться до тех пор пока переменная timeLeft не станет больше нужного нам времени.

Каждую итерацию цикла мы прибавляем к timeLeft Time.deltaTime (это время обработки последнего кадра), затем сдвигаем юнита, а потом с помощью yield return null ждём до начала следующего кадра, и уже в нём начинаем следующую итерацию.

READ ALSO
Как использовать интервалы

Как использовать интервалы

Надо сделать интервал из которого программа будет сама задавать значение и потом чтобы при проверке если не подошло значение ,то программа...

196
аналог tcpListener.Pending() в Socket C#

аналог tcpListener.Pending() в Socket C#

Нужен аналогический метод к tcpListenerPending() но в классе Socket

161
Нажатие клавиш в браузере (selenium)

Нажатие клавиш в браузере (selenium)

Использую Selenium для прохождения регистрации на сайте, имеется кнопка(вот вся информация по ней):

182
C# версия джавовского .in() метода

C# версия джавовского .in() метода

Столкнулся с проблемойЕсть решение моей проблемы для джавы:

160