Menu
CoddyTech

Grawitacja i masa

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

Komponent Rigidbody przekazuje swój obiekt fizyce Unity, tak jak stało się to po dodaniu go w sekcji Add a Component. Od tej chwili grawitacja przyspiesza obiekt o 9.81 m/s w każdej sekundzie, a komponent Rigidbody ma ustawienia, które o tym decydują. Dwa z nich to mass, wyrażona w kilogramach (1 dla nowego komponentu Rigidbody), oraz useGravity (włączona dla nowego komponentu Rigidbody).

Masa nie zmienia szybkości spadania obiektów. Grawitacja mocniej przyciąga ciężkie ciało, ale o dokładnie tyle samo trudniej je rozpędzić, więc skrzynia o masie 1 kg i kowadło o masie 50 kg, upuszczone z tej samej wysokości, lądują w tej samej klatce. Masa ma znaczenie, gdy ciała napierają na siebie: kowadło odpycha skrzynię, a skrzynia prawie nie porusza kowadła. Ten balon imprezowy ma niewielką masę i nie podlega działaniu grawitacji, więc unosi się tam, gdzie umieściła go scena:

void Start()
{
    Rigidbody rb = GetComponent<Rigidbody>();
    rb.mass = 0.2f;
    rb.useGravity = false;
}

Gdy useGravity jest wyłączona, balon nadal ma swoją masę i nadal porusza się, gdy coś w niego uderzy: przestaje działać tylko siła grawitacji. Ustaw ją z powrotem na true, a grawitacja znów będzie przyciągać obiekt z miejsca, w którym się znajduje. W fizyce Unity nie ma też powietrza, więc pióro spada jak cegła, chyba że ustawisz dla jego komponentu Rigidbody pewną wartość tłumienia liniowego.

challenge icon

Wyzwanie

Łatwy

Zawieś obie skrzynie, a następnie upuść je jednocześnie, naciskając spację.

  1. W Start(), poniżej linii GetComponent, ustaw rb.mass = weight; i rb.useGravity = false;.
  2. W Update(), po naciśnięciu Input.GetKeyDown(KeyCode.Space), ustaw rb.useGravity = true;.

Naciśnij „Graj” i naciśnij spację: ciężki sejf i lekka skrzynka lądują jednocześnie. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

public class CraneLoad : MonoBehaviour
{
    public float weight = 1f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // Ustaw masę na wartość weight i wyłącz działanie grawitacji
    }

    void Update()
    {
        // Space: ponownie włącz działanie grawitacji
    }
}

Wszystkie lekcje w sekcji Fizyka i rozgrywka

Poćwicz samodzielnie: Edytor online Unity