Гравитация и масса
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 1 из 63.
Компонент 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 параметр Linear Damping.
Задание
ЛегкоКран удерживает над доком два ящика: тяжёлый Safe и лёгкий Box. У обоих есть Rigidbody и скрипт CraneLoad, для которого Inspector задаёт weight (80 для Safe, 2 для Box).
- Когда игра начинается, установи массу Rigidbody равной
weightи отключи силу тяжести, чтобы ящик оставался на месте. - Когда будет нажата клавиша Space, снова включи силу тяжести, чтобы ящик упал.
Нажми Play, нажми Space и посмотри, какой ящик приземлится первым, затем нажми Check.
Попробуйте сами
using UnityEngine;
public class CraneLoad : MonoBehaviour
{
public float weight = 1f;
void Start()
{
// Установить массу равной weight и отключить действие гравитации
}
void Update()
{
// Space: снова включить действие гравитации
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора