Menu
CoddyTech

Prędkość

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

rb.linearVelocity określa, jak ciało porusza się w danej chwili: to Vector3 wyrażony w metrach na sekundę wzdłuż osi x, y i z. Odczyt tej wartości informuje, dokąd zmierza ciało, a rb.linearVelocity.magnitude to jego szybkość. Ustawienie tej wartości natychmiast zmienia ruch, bez rozpędzania i bez uwzględniania masy: skrzynia o masie 1 kg i sejf o masie 50 kg, którym ustawiono prędkość 2 m/s, od następnego kroku fizyki poruszają się z dokładnie taką samą prędkością 2 m/s. Grawitacja, tarcie i uderzenia nadal działają na nie później.

Ten gokart jedzie do przodu z dokładnie cruise m/s. Kopiuje wektor prędkości, zmienia tylko z i przypisuje go z powrotem, dzięki czemu zachowuje wartość y nadaną przez grawitację, a gokart nadal spada z końca rampy:

void FixedUpdate()
{
    Vector3 vel = rb.linearVelocity;
    vel.z = cruise;            // do przodu z prędkością dokładnie cruise m/s
    rb.linearVelocity = vel;   // y zachowuje wartość nadaną przez grawitację
}

Ustawienie y na 0 również odrzuciłoby prędkość nadaną przez grawitację przy każdym kroku, a gokart zsuwałby się z rampy zamiast spadać. Przed Unity 6 ta właściwość nazywała się velocity. W starych samouczkach nadal można znaleźć zapis rb.velocity: w Unity 6 kod się kompiluje, ale pojawia się ostrzeżenie, że velocity jest przestarzałe i zostało przemianowane na linearVelocity. Podobnie drag zmieniło nazwę na linearDamping. Używaj nowych nazw.

challenge icon

Wyzwanie

Łatwy

Poruszaj robotem z prędkością dokładnie speed m/s i pozwól mu spaść z krawędzi.

  1. W FixedUpdate() odczytaj float h = Input.GetAxisRaw("Horizontal"); oraz float v z "Vertical".
  2. Ustaw rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, v * speed);, zachowując składową y grawitacji.

Naciśnij „Graj” i zejdź z krawędzi: robot zatrzyma się, gdy puścisz przycisk, i spadnie. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

public class RobotWalk : MonoBehaviour
{
    public float speed = 3f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // Poruszaj się za pomocą strzałek z prędkością równą dokładnie speed, zachowując składową y wynikającą z grawitacji
    }
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity