Толкаем с помощью AddForce
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 2 из 63.
Когда у объекта есть компонент Rigidbody, им движет физика, поэтому ты перестаёшь менять его положение и вместо этого толкаешь его. rb.AddForce(force) толкает тело с помощью силы — величины Vector3, измеряемой в ньютонах. Сила не задаёт скорость: она ускоряет тело, пока ты продолжаешь её прикладывать, на величину силы, делённой на массу, каждую секунду. Перестань толкать — и тело продолжит двигаться с имеющейся у него скоростью.
У этого ховеркрафта (2 кг) есть двигатель: пока нажата клавиша со стрелкой вверх, сила thrust толкает его вперёд вдоль +z. При тяге 12 скорость увеличивается на 12 / 2 = 6 м/с каждую секунду:
public float thrust = 12f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.UpArrow))
{
rb.AddForce(Vector3.forward * thrust);
}
}Силы применяются в FixedUpdate(), который Unity вызывает перед каждым шагом физики — 50 раз в секунду (в уроке 4 объясняется почему). В этой строке нет Time.deltaTime: AddForce уже распределяет силу на весь шаг, а умножение на Time.deltaTime сделало бы толчок в 50 раз слабее. На земле трение действует в обратную сторону, поэтому небольшая сила может совсем не сдвинуть тяжёлую коробку.
Задание
ЛегкоШайба на ледовом катке имеет компонент Rigidbody, а у льда нет трения. Толкай её стрелками: ось Horizontal толкает её вдоль x, а ось Vertical — вдоль z, с силой push (4 в Inspector).
Толкай её только силами, чтобы она продолжала скользить, когда ты отпустишь кнопки. Нажми Play, управляй шайбой на катке, затем нажми Check.
Попробуйте сами
using UnityEngine;
public class PuckPusher : MonoBehaviour
{
public float push = 4f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Толкаем шайбу: Horizontal вдоль оси x, Vertical вдоль оси z
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Погоня за монетами
Катящийся мячМонеты для сбора