Menu
CoddyTech

Popychanie za pomocą AddForce

Część sekcji Fizyka i rozgrywka ścieżki Unity w Coddy. Lekcja 2 z 71.

Gdy obiekt ma już komponent Rigidbody, porusza nim fizyka, więc przestajesz zmieniać jego położenie i zamiast tego go popychasz. rb.AddForce(force) popycha ciało siłą, czyli wartością Vector3 wyrażoną w niutonach. Siła nie ustawia prędkości: przyspiesza ciało tak długo, jak ją dodajesz, o wartość siły podzieloną przez masę w każdej sekundzie. Przestań popychać, a ciało zachowa swoją prędkość.

Ten poduszkowiec (2 kg) ma silnik: gdy strzałka w górę jest wciśnięta, działa na niego siła thrust, która popycha go do przodu, wzdłuż osi +z. Przy sile ciągu równej 12 jego prędkość wzrasta o 12 / 2 = 6 m/s w każdej sekundzie:

public float thrust = 12f;
private Rigidbody rb;

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

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

Siły dodawaj w FixedUpdate(), którą Unity wywołuje przed każdym krokiem fizyki, 50 razy na sekundę (lekcja 4 wyjaśnia dlaczego). W tym wierszu nie ma Time.deltaTime: AddForce już rozkłada siłę na cały krok, a pomnożenie jej przez Time.deltaTime sprawiłoby, że pchnięcie byłoby 50 razy słabsze. Na podłożu tarcie działa w przeciwną stronę, więc niewielka siła może wcale nie poruszyć ciężkiego pudła.

challenge icon

Wyzwanie

Łatwy

Popychaj krążek po pozbawionym tarcia lodowisku za pomocą sił.

  1. W FixedUpdate() odczytaj float h = Input.GetAxis("Horizontal"); oraz float v = Input.GetAxis("Vertical");.
  2. Wywołaj rb.AddForce(new Vector3(h, 0, v) * push); bez Time.deltaTime.

Naciśnij „Graj”, popchnij i puść: krążek nadal będzie się ślizgał. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

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

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

    void FixedUpdate()
    {
        // Popychaj krążek: Horizontal wzdłuż osi x, Vertical wzdłuż osi z
    }
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity