Толкаем с помощью AddForce
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 2 из 71.
Когда у объекта появляется 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 раз слабее. На земле трение толкает в обратную сторону, поэтому небольшая сила может вообще не сдвинуть тяжёлую коробку.
Задание
ЛегкоТолкай шайбу по катку без трения с помощью сил.
- В
FixedUpdate()считай значенияfloat h = Input.GetAxis("Horizontal");иfloat v = Input.GetAxis("Vertical");. - Вызови
rb.AddForce(new Vector3(h, 0, v) * push);, безTime.deltaTime.
Нажми «Играть», толкни шайбу и отпусти: она продолжит скользить. Затем нажми «Проверить».
Попробуйте сами
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 для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity