Unity3d: Попытка переместить объект вперед, а затем назад - PullRequest
0 голосов
/ 15 сентября 2018

Я новичок в Unity и пытаюсь найти способ продвинуть блок вперед на определенное количество времени, а затем вернуть его в исходное положение за то же время.Я использую Time.deltaTime, чтобы переместить блок в течение установленного количества времени, и это действительно работает.Однако, как только переменная countDown достигает 0 и объект должен начать возвращаться в исходное положение, объект перестает двигаться, и я не уверен, почему.

public class Problem1 : MonoBehaviour { 
    float countDown = 5.0f;

    // Use this for initialization
    void Start () {

    }

    void Update () {
        transform.position += Vector3.forward * Time.deltaTime;
        countDown -= Time.deltaTime;

        if (countDown <= 0.0f)
            transform.position += Vector3.back * Time.deltaTime;
 }
}

Я вполне уверен, что я использую Vector3.back неправильно, но я не могу понять, как.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Объект прекращает движение, потому что как только countDown достигает 0,0f, вы все равно перемещаете его вперед, но вы также перемещаете его назад.

Другими словами, у вас работает код, который в основном делает это:

if (countDown > 0.0f) {
    transform.position += Vector3.forward * Time.deltaTime;
    countDown -= Time.deltaTime;
} else if (countDown <= 0.0f) {
    transform.position += Vector3.forward * Time.deltaTime;
    transform.position += Vector3.back * Time.deltaTime;
    countDown -= Time.deltaTime;

Я бы порекомендовал запустить ваш код следующим образом:

public class Problem1 : MonoBehaviour { 
float countDown = 5.0f;

// Use this for initialization
void Start () {

}

void Update () {
    if (countDown > 0.0f) {
    transform.position += Vector3.forward * Time.deltaTime;
    countDown -= Time.deltaTime;
}

    else if (countDown <= 0.0f) {
        transform.position += Vector3.back * Time.deltaTime;
    countDown += Time.deltaTime;
    }
}
}

на самом деле оператор else, вероятно, будет работать лучше, чем оператор else if, но я сделал его оператор else ifутверждение для ясности.

Удачи!

0 голосов
/ 16 сентября 2018

Это потому, что вы перемещаете свой объект вперед и назад одновременно.Вы хотите переместить его только тогда, когда countDown больше 0.
Это код, который вам нужен:

public class Problem1 : MonoBehaviour { 
    float countDown = 5.0f;

    // Use this for initialization
    void Start () {

    }

    void Update () {
        countDown -= Time.deltaTime;

        if(countDown > 0)
            transform.position += Vector3.forward * Time.deltaTime;
        else if (countDown > -5.0f) // You don't want to move backwards too much!
            transform.position += Vector3.back * Time.deltaTime;
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...