Ускорение объекта в определенном направлении

Я пытаюсь сделать игру сам и столкнулся с трудностью.

У меня есть этот объект, и мне нужно, чтобы он ускорился до точки вектора 3.

Я пробовал использовать команду Vector3.MoveTowards, но объект движется с постоянной скоростью и останавливается в пункте назначения.

Что мне нужно сделать, так это заставить объект ускоряться от скорости 0 к точке вектора 3 и не останавливаться в этой точке, а продолжать движение в том же направлении после того, как он прошел через точку.

Кто-нибудь знает как это сделать?

Спасибо!


person Alberto O.    schedule 09.07.2016    source источник


Ответы (1)


Выполните эти шаги в методе, который вызывается в методе Update или FixedUpdate. FixedUpdate рекомендуется, если вы используете твердые тела.

Во-первых, вам нужно найти направление от вашего положения к точке и определить переменную экземпляра velocity в вашем скрипте, если вы не используете Rigid Bodies. Если вы используете Rigidbody, используйте вместо него rigidbody.velocity. target - это позиция Vector3, к которой вы хотите ускориться.

// Use rigidbody.velocity instead of velocity if using a Rigidbody
private Vector3 velocity; // Only if you are NOT using a RigidBody

Vector3 direction = (target - transform.position).normalized;

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

// If our velocity and the direction point in different directions 
// we have already passed the target, return
if(Vector3.Dot(velocity, direction) < 0)
    return;

Как только мы это сделаем, нам нужно ускорить наш Transform или Rigidbody.

// If you do NOT use rigidbodies
// Perform Euler integration
velocity += (accelMagnitude * direction) * Time.deltaTime;
transform.position += velocity * Time.deltaTime;

// If you DO use rigidbodies
// Simply add a force to the rigidbody
// We scale the acceleration by the mass to cancel it out
rigidbody.AddForce(rigidbody.mass * (accelMagnitude * direction));

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

person EvilTak    schedule 09.07.2016
comment
Извините, но он останавливается на позиции. Куда должна идти третья часть сценария? Внутри оператора if во второй части вашего ответа? - person Alberto O.; 09.07.2016
comment
@AlbertoO. Он должен быть после оператора if. - person EvilTak; 09.07.2016