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

Что такое pivot?

1.0 Junior🔥 131 комментариев
#Другое

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

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

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

Что такое Pivot в Unity

Pivot (или "точка опоры", "центр трансформации") в Unity — это локальная точка, относительно которой происходят все трансформации игрового объекта (GameObject): перемещение, вращение и масштабирование. Это фундаментальная концепция, которая определяет, как объект "заякорен" в пространстве.

Ключевые аспекты Pivot

  • Локальная точка отсчета: Pivot всегда находится в локальном пространстве объекта. Его координаты (0,0,0) — это и есть позиция самого pivot'а в мировом пространстве.
  • Центр манипуляций: Когда вы выделяете объект в сцене, манипуляторы (гизмо) для перемещения, вращения и масштабирования отображаются именно в этой точке.
  • Отличие от центра масс (Center): Это важнейшее различие. В Unity можно переключить режим отображения манипулятора между Pivot и Center (кнопки вверху слева в окне Scene View или клавиша Z).
    *   **В режиме Pivot** манипулятор находится в той точке, которая была задана при моделировании в 3D-редакторе (например, в Blender или Maya).
    *   **В режиме Center** манипулятор автоматически помещается в геометрический центр выбранного объекта(ов) или его коллайдера, что часто удобнее для выравнивания.

Практическое значение и примеры

  1. Вращение: Pivot критически важен для вращения. Если pivot расположен в ногах персонажа, объект будет вращаться вокруг этой точки, как при повороте на месте. Если pivot в центре — объект будет вращаться вокруг своей середины, как вертолет.

    // Вращение объекта вокруг его текущего pivot'а (локальное пространство)
    void Update() {
        transform.Rotate(Vector3.up, 45 * Time.deltaTime);
    }
    
  2. Масштабирование: Объект будет равномерно увеличиваться или уменьшаться "от" своей точки pivot.

  3. Моделирование и импорт: Позиция pivot'а зачастую определяется художником в программе для 3D-моделирования. Например, для двери pivot логично разместить у края, где находятся петли, чтобы вращение выглядело естественно. Unity, импортируя модель, сохраняет это положение.

  4. Скриптинг: В коде transform.position возвращает именно мировые координаты точки pivot объекта.

    // Получение и изменение позиции pivot'а объекта в мировом пространстве
    Vector3 worldPivotPosition = transform.position;
    transform.position = new Vector3(10, 0, 5); // Перемещает весь объект так, чтобы его pivot оказался в точке (10,0,5)
    

Как работать с Pivot в Unity

  • Изменение через редактор: Для простых примитивов (куб, сфера) или пустых объектов вы не можете напрямую сдвинуть pivot в инспекторе. Однако можно создать пустой GameObject (который станет новым родителем с нужным pivot'ом) и поместить модель в него как дочерний объект. Все трансформации тогда следует применять к родителю.
  • Для 3D-моделей: Положение pivot'а можно изменить во вкладке Model импортированного ассета, раздел Mesh, параметр Mesh Compression. Но кардинально его сдвинуть проще в оригинальном 3D-редакторе и переимпортировать модель.
  • Для 2D-спрайтов (SpriteRenderer): У спрайтов есть отдельное свойство Pivot (в настройках самого спрайта в импортере), которое определяет точку привязки текстуры к трансформациям GameObject'а. Оно задается в относительных координатах (например, BottomLeft (0,0) или Center (0.5, 0.5)).

Типичные проблемы и лучшие практики

  • Проблема: Объект вращается или масштабируется "не из того места". Это почти всегда связано с неправильно установленным pivot'ом.
  • Решение: Используйте иерархию объектов. Например, для персонажа:
    *   `Player (GameObject, pivot в ногах)` — отвечает за движение по земле.
        *   `Graphics (GameObject, pivot в геометрическом центре модели)` — отвечает за вращение и анимацию модели.
        *   `AttackPoint (GameObject)` — дочерний объект, используемый как точка появления снарядов.
  • Лучшая практика: Для сложных или анимированных объектов никогда не изменяйте трансформации (особенно вращение) меша (MeshRenderer/SpriteRenderer) напрямую. Вместо этого работайте с иерархией пустых GameObject'ов, где родительский объект имеет логичный pivot для игровой логики, а дочерний содержит визуальное представление.

Итог: Pivot — это не просто визуальный маркер, а базовая математическая точка привязки, определяющая поведение объекта при любом преобразовании. Понимание и правильная настройка pivot'а через иерархию объектов — один из ключевых навыков для создания предсказуемой и управляемой игровой механики в Unity.

Что такое pivot? | PrepBro