Menu
CoddyTech

Толкаем с помощью AddForce

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 2 из 71.

Когда у объекта появляется Rigidbody, физика начинает перемещать его, поэтому ты перестаёшь менять его положение и вместо этого толкаешь его. rb.AddForce(force) толкает тело силой — величиной типа Vector3, измеряемой в ньютонах. Сила не задаёт скорость: она ускоряет тело, пока ты продолжаешь её прикладывать, на величину силы, делённую на массу, каждую секунду. Перестань толкать — и тело продолжит двигаться с той скоростью, которую уже набрало.

У этого ховеркрафта (2 кг) есть двигатель: пока удерживается клавиша со стрелкой вверх, сила thrust толкает его вперёд, вдоль +z. При тяге 12 скорость увеличивается на 12 / 2 = 6 м/с каждую секунду:

public float thrust = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.UpArrow))
    {
        rb.AddForce(Vector3.forward * thrust);
    }
}

Силы прикладываются в FixedUpdate(), который Unity вызывает перед каждым шагом физики — 50 раз в секунду (в уроке 4 объясняется почему). В этой строке нет Time.deltaTime: AddForce уже распределяет силу на весь шаг, а умножение на Time.deltaTime сделало бы толчок в 50 раз слабее. На земле трение толкает в обратную сторону, поэтому небольшая сила может вообще не сдвинуть тяжёлую коробку.

challenge icon

Задание

Легко

Толкай шайбу по катку без трения с помощью сил.

  1. В FixedUpdate() считай значения float h = Input.GetAxis("Horizontal"); и float v = Input.GetAxis("Vertical");.
  2. Вызови rb.AddForce(new Vector3(h, 0, v) * push);, без Time.deltaTime.

Нажми «Играть», толкни шайбу и отпусти: она продолжит скользить. Затем нажми «Проверить».

Попробуйте сами

using UnityEngine;

public class PuckPusher : MonoBehaviour
{
    public float push = 4f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // Толкаем шайбу: Horizontal вдоль x, Vertical вдоль z
    }
}

Все уроки раздела Физика и игровой процесс

Потренируйтесь самостоятельно: Песочница Unity