Unity, как разрешить объекту перемещаться в пределах определенной границы, используя только координаты - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу написать скрипт для куба, чтобы он мог двигаться только от 0-5 по оси x. Мой куб начинается с нуля. Я хочу, чтобы мой куб двигался вперед, пока он не достигнет 5, затем остановился и пошел назад, пока он не достигнет 0, затем повторите.

Проблема, которую я получаю, состоит в том, что мой куб, конечно, останавливается на 5, перемещается назад на 1 шаг к 4 и, конечно, ему разрешено снова двигаться вперед. Я хочу, чтобы это пошло 0-5, затем 5-0 и повторить.

Моя попытка

    //Drags cube along the ground
    if (transform.position.x > 0 & transform.position.x < 5) {
        transform.Translate(1* Time.deltaTime, 0, 0);
    }

//If our cubes reaches our boundary, move it backwards
if (transform.position.x >= 5 || transform.position.x <= 0 ) {
    transform.Translate(-1, 0, 0);
}

1 Ответ

0 голосов
/ 14 ноября 2018

Используйте Mathf.PingPong, чтобы колебаться между 0f и 5f в зависимости от текущего времени.

float speed = 1f;
float curXPosition = Mathf.PingPong(speed * Time.time, 5f);
transform.position = new Vector3(curXPosition,transform.position.y,transform.position.z);

Если вам нужно, чтобы оно начиналось с 0 в определенное время:

// as class field
public float zeroTime=0f;
public float speed;

// When you want it to start from zero, call this line:
this.zeroTime = Time.time; 

// in Update/FixedUpdate
float curXPosition = Mathf.PingPong(speed * (Time.time-zeroTime), 5f);
transform.position = new Vector3(curXPosition,transform.position.y,transform.position.z);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...