Найти в Дзене
Hello world

Оживляем игровой мир: реалистичная физика в Unity для начинающих

Оглавление

Прыжок Марио, отскок мяча или скольжение по льду — эти мелочи создают погружение. Физика превращает статичную сцену в живой мир. В 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++;
// Собираем монету
}
}

Оптимизация: как избежать лагов


Физика — ресурсоёмкий модуль. Три главных правила:

  1. Отключайте ненужное: для объектов вне камеры ставьте Rigidbody.isKinematic = true.
  2. Упрощайте коллайдеры: вместо Mesh Collider для сложных моделей комбинируйте примитивы (кубы, сферы).
  3. Уменьшайте расчёты: статичным объектам (стены, пол) не добавляйте Rigidbody.

Пример из практики: в игре с разрушаемыми стенами используйте упрощённые коллайдеры для обломков и отключайте их физику после остановки.

Идеи для геймдизайна

  • Платформеры: падающие блоки, активируемые триггером (как в Hollow Knight).
  • Симуляторы: объекты с разной плавучестью через mass и drag (как в Raft).
  • Головоломки: ледяные поверхности с friction = 0, заставляющие персонажа скользить.

Важно: не перегружайте сцену. 1000 физических объектов = риск фризов. Для эффектов (листья, осколки) используйте системы частиц без физики.


Физика в
Unity — ключ к реалистичному миру. Освойте связку Rigidbody + Collider + Physic Material, и вы сможете создавать:

  • Динамичные платформеры,
  • Удовлетворительные разрушения,
  • Правдоподобные симуляции.

Наши ученики в Hello World School применяют эти принципы в мультиплеерных шутерах и мобильных хитах. Попробуйте сами: создайте сцену с шаром, который отскакивает от скользких и упругих поверхностей — это лучший старт!