Menu
CoddyTech

Гравитация и масса

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

Rigidbody передаёт свой объект физике Unity, как это произошло, когда ты добавил его через «Добавить компонент». С этого момента гравитация каждую секунду разгоняет объект на 9.81 м/с, а в Rigidbody есть настройки, определяющие, как это происходит. Две из них — mass, измеряемая в килограммах (1 у нового Rigidbody), и useGravity (включённый у нового Rigidbody).

Масса не влияет на скорость падения. Гравитация сильнее тянет тяжёлое тело, но ровно настолько же труднее его разогнать, поэтому ящик массой 1 кг и наковальня массой 50 кг, сброшенные с одной высоты, приземляются в одном и том же кадре. Масса имеет значение, когда тела толкают друг друга: наковальня отбрасывает ящик в сторону, а ящик почти не сдвигает наковальню. У этого праздничного шарика маленькая масса, и гравитация его не трогает, поэтому он висит там, где его разместила сцена:

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

Когда useGravity выключен, масса шарика остаётся прежней, и он по-прежнему движется, если что-то его заденет: перестаёт действовать только притяжение гравитации. Снова установи значение true, и гравитация опять начнёт тянуть объект оттуда, где он находится. В физике Unity воздуха тоже нет, поэтому перо падает как кирпич, если не задать его Rigidbody некоторое значение линейного сопротивления.

challenge icon

Задание

Легко

Подвесьте оба ящика, а затем сбросьте их одновременно, нажав клавишу Space.

  1. В Start(), ниже строки GetComponent, задайте rb.mass = weight; и rb.useGravity = false;.
  2. В Update(), при Input.GetKeyDown(KeyCode.Space), задайте rb.useGravity = true;.

Нажмите «Играть» и нажмите Space: тяжёлый сейф и лёгкая коробка приземлятся одновременно. Затем нажмите «Проверить».

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

using UnityEngine;

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

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // Установить массу равной weight и отключить действие гравитации
    }

    void Update()
    {
        // Space: снова включить действие гравитации
    }
}

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

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