← Назад к вопросам

Какие компоненты Unity позволяют работать с физикой?

1.6 Junior🔥 221 комментариев
#Unity Core#Физика и математика

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Компоненты физической системы Unity

Unity предоставляет мощный и гибкий набор компонентов для работы с физикой, основанный на PhysX от NVIDIA (для 3D) и Box2D (для 2D). Эти компоненты можно разделить на несколько ключевых категорий.

Базовые компоненты для определения формы объекта (Colliders)

Коллайдеры определяют физическую форму объекта для обнаружения столкновений. Они бывают примитивных и сложных типов:

  • Примитивные 3D коллайдеры: Box Collider, Sphere Collider, Capsule Collider.
  • Сложные 3D коллайдеры: Mesh Collider (использует полигональную сетку, ресурсоёмкий) и Wheel Collider (специализированный для транспортных средств).
  • 2D коллайдеры: Box Collider 2D, Circle Collider 2D, Polygon Collider 2D, Capsule Collider 2D, Composite Collider 2D (для оптимизации уровня).

Пример добавления коллайдера в скрипте:

// Добавляем компонент BoxCollider к текущему GameObject
BoxCollider collider = gameObject.AddComponent<BoxCollider>();
// Настраиваем размер и центр
collider.size = new Vector3(2f, 1f, 1f);
collider.center = new Vector3(0, 0.5f, 0);

Компоненты, приводящие объекты в движение (Rigidbodies)

Rigidbody — это ядро физической симуляции. Он наделяет объект массой, подверженностью силам и гравитации, делая его управляемым физическим движком.

  • Rigidbody (3D): Полноценная физическая симуляция.
  • Rigidbody 2D: Аналогичный компонент для 2D-пространства.

Через Rigidbody можно применять силы, что является предпочтительным способом перемещения физических объектов:

public class PlayerMovement : MonoBehaviour
{
    private Rigidbody rb;
    public float jumpForce = 5f;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Применяем импульсную силу вверх
            rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
        }
    }
}

Специализированные и управляющие компоненты

  • Character Controller: Альтернатива Rigidbody для персонажей. Позволяет тонко управлять движением (включая силу тяжести и столкновения), минуя полноценную физическую симуляцию, что часто даёт более отзывчивый геймплей.
  • Joint (и 2D Joint): Компоненты, создающие физические связи между объектами (например, пружины, шарниры, тросы). Примеры: HingeJoint, FixedJoint, SpringJoint.
  • Articulation Body: Продвинутая альтернатива Rigidbody и Joints для создания сложных роботизированных конечностей или цепочек, где требуется точный контроль над степенью свободы.
  • Constant Force: Позволяет непрерывно применять к объекту силу или крутящий момент, что удобно для ракет или постоянных ускорений.

Компоненты для взаимодействия и событий

  • Triggers: Любой коллайдер, у которого свойство isTrigger установлено в true. Он не создаёт физического отталкивания, но генерирует события при пересечении, что используется для логики игры (зоны урона, сбор предметов).
void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Collectible"))
    {
        Destroy(other.gameObject);
        // Добавляем очки и т.д.
    }
}
  • Raycast'ы: Не являются компонентами в привычном смысле, а методами Physics и Physics2D классов. Это важнейший инструмент для "простреливания" луча в сцене и обнаружения коллайдеров, используемый для выстрелов, определения поверхности под ногами, выбора объектов курсором.
void CheckForGround()
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, Vector3.down, out hit, 1.1f))
    {
        Debug.Log("Стоим на: " + hit.collider.gameObject.name);
    }
}

Важные настройки и слои

  • Физические материалы (Physics Material / Physics Material 2D): Настраивают трение и упругость (отскок) поверхности коллайдера.
  • Слои столкновений (Layer Collision Matrix): Определяют, какие слои (Layers) объектов могут сталкиваться друг с другом. Настраивается в Edit > Project Settings > Physics и является ключевым инструментом оптимизации и управления взаимодействиями.

Таким образом, работа с физикой в Unity — это композиция: Rigidbody задаёт физические свойства, Collider определяет форму для взаимодействий, силы приводят объект в движение, а события (OnCollisionEnter/Stay/Exit и OnTriggerEnter/Stay/Exit) и Raycast'ы позволяют реагировать на эти взаимодействия в коде, создавая целостное и реалистичное поведение.