Прыжок Марио, отскок мяча или скольжение по льду — эти мелочи создают погружение. Физика превращает статичную сцену в живой мир. В Unity её настройка основана на трёх ключевых компонентах. Разберём, как их использовать.
Базовые компоненты: Rigidbody, Collider, Material
Rigidbody — «двигатель» физики. Без него объект не реагирует на силы (гравитацию, толчки). Добавляется через Inspector → Add Component → Rigidbody.
Важные параметры:
- Mass (масса) — влияет на инерцию;
- Use Gravity — включает/выключает падение;
- Freeze Rotation/Position — блокирует движение по осям.
Collider — невидимая оболочка для столкновений. Выбор типа зависит от формы:
- Box Collider — для кубов, платформ;
- Sphere Collider — для шаров, пуль;
- Mesh Collider — для сложных моделей (используйте осторожно — ресурсоёмко!).
Physics Material — задаёт свойства поверхностей. Создаётся через Assets → Create → Physic Material. Параметры:
- Friction (трение): 0 = лёд, 1 = резина;
- Bounciness (упругость): 0 = пластилин, 1 = батут.
Пример: мяч = Sphere Collider + Rigidbody + Physic Material с Bounciness = 0.8.
Настройка движения: силы и ограничения
Для перемещения объектов используйте AddForce() в скриптах. Базовый пример:
public class PlayerMovement : MonoBehaviour {
public float thrust = 15f;
private Rigidbody rb;
void Start() {
rb = GetComponent<Rigidbody>();
}
void Update() {
if (Input.GetKey(KeyCode.Space)) {
rb.AddForce(Vector3.up * thrust); // Прыжок при нажатии пробела
}
}
}
Чтобы ограничить скорость, добавьте в FixedUpdate():
rb.velocity = Vector3.ClampMagnitude(rb.velocity, maxSpeed);
Обработка столкновений и триггеры
Для реакции на касания используйте OnCollisionEnter:
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.CompareTag("Enemy")) {
Destroy(collision.gameObject); // Уничтожаем врага при ударе
}
}
Для зон, где физика не нужна (например, сбор монет), включите Is Trigger у Collider и используйте OnTriggerEnter:
void OnTriggerEnter(Collider other) {
if (other.CompareTag("Coin")) {
coins++; // Собираем монету
}
}
Оптимизация: как избежать лагов
Физика — ресурсоёмкий модуль. Три главных правила:
- Отключайте ненужное: для объектов вне камеры ставьте Rigidbody.isKinematic = true.
- Упрощайте коллайдеры: вместо Mesh Collider для сложных моделей комбинируйте примитивы (кубы, сферы).
- Уменьшайте расчёты: статичным объектам (стены, пол) не добавляйте Rigidbody.
Пример из практики: в игре с разрушаемыми стенами используйте упрощённые коллайдеры для обломков и отключайте их физику после остановки.
Идеи для геймдизайна
- Платформеры: падающие блоки, активируемые триггером (как в Hollow Knight).
- Симуляторы: объекты с разной плавучестью через mass и drag (как в Raft).
- Головоломки: ледяные поверхности с friction = 0, заставляющие персонажа скользить.
Важно: не перегружайте сцену. 1000 физических объектов = риск фризов. Для эффектов (листья, осколки) используйте системы частиц без физики.
Физика в Unity — ключ к реалистичному миру. Освойте связку Rigidbody + Collider + Physic Material, и вы сможете создавать:
- Динамичные платформеры,
- Удовлетворительные разрушения,
- Правдоподобные симуляции.
Наши ученики в Hello World School применяют эти принципы в мультиплеерных шутерах и мобильных хитах. Попробуйте сами: создайте сцену с шаром, который отскакивает от скользких и упругих поверхностей — это лучший старт!