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

В чем разница между локальными и глобальными координатами в Unity?

2.0 Middle🔥 152 комментариев
#Unity Core

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

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

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

Разница между локальными и глобальными координатами в Unity

В Unity существует два основных типа координатных систем: глобальные (world space) и локальные (local space). Это фундаментальное различие определяет, как объекты позиционируются и ориентируются в сцене.

Глобальные координаты (World Space)

Глобальные координаты — это абсолютная система координат всей сцены. Они имеют фиксированное начало (точку origin — (0,0,0)) и ориентацию осей:

  • X — указывает вправо
  • Y — указывает вверх
  • Z — указывает вперёд (в 3D)

Любая точка внутри сцены описывается уникальным вектором (x, y, z) в этой системе. Например, координаты (5, 2, 10) всегда означают точку на 5 единиц правее, на 2 выше и на 10 единиц впереди от центра мира, независимо от каких-либо объектов.

// Получить глобальную позицию объекта Transform
Vector3 worldPosition = transform.position;

// Установить глобальную позицию объекта
transform.position = new Vector3(10f, 0f, 5f);

Локальные координаты (Local Space)

Локальные координаты — это относительная система координат, привязанная к конкретному объекту (обычно к его родительскому объекту — parent). Её начало и ориентация осей определяются родительским Transform.

  • Начало координат (0,0,0) — позиция родительского объекта.
  • Оси — соответствуют направлению осей родительского объекта.

Например, у машины (дочерний объект) есть локальные координаты относительно дороги (родительский объект). Если машина имеет локальную позицию (0, 0.5, 2), она находится на 0.5 единиц выше и на 2 единицы впереди центра дороги.

// Получить локальную позицию объекта относительно родителя
Vector3 localPosition = transform.localPosition;

// Установить локальную позицию
transform.localPosition = new Vector3(0f, 1f, 0f);

Ключевые различия и практическое применение

  1. Зависимость от иерархии:
    *   **Глобальные**: Не зависят от родительских объектов. `transform.position` объекта останется прежним, даже если сменится его родитель.
    *   **Локальные**: Полностью определяются родителем. Изменение позиции, поворота или масштаба родителя повлияет на глобальную позицию всех его дочерних объектов, хотя их `localPosition` останется неизменным.

  1. Масштабирование (Scale):
    *   Локальный масштаб (`localScale`) объекта умножается на масштаб его родителя, чтобы получить итоговый глобальный масштаб. Это критически важно для корректного отображения сложных иерархий.

  1. Преобразования (Transformation):
    Часто необходимо переводить координаты из одной системы в другую. Для этого в Transform существуют специальные методы:
```csharp
// Преобразовать локальную точку в глобальные координаты
Vector3 worldPoint = transform.TransformPoint(1f, 0f, 0f);

// Преобразовать глобальную точку в локальные координаты этого объекта
Vector3 localPoint = transform.InverseTransformPoint(new Vector3(10f, 0f, 0f));

// Преобразовать направление (без учёта позиции и масштаба)
Vector3 worldDirection = transform.TransformDirection(Vector3.forward);
```

Когда что использовать?

  • Используйте глобальные координаты (transform.position), когда:
    *   Нужно разместить объект в конкретной точке мира (например, спавн игрока в точке старта).
    *   Работаете с физикой (например, `Rigidbody.MovePosition` оперирует глобальными координатами).
    *   Сравниваете расстояния между независимыми объектами.

  • Используйте локальные координаты (transform.localPosition), когда:
    *   Работаете с иерархией объектов (например, размещаете колесо относительно кузова машины).
    *   Создаёте префабы с независимой внутренней структурой.
    *   Анимируете объект относительно его родителя.

Пример для наглядности: Представьте Солнечную систему. Позиция Земли в локальных координатах Солнца (localPosition) будет описывать её положение на орбите. А её глобальные координаты (position) в мире — это абсолютная точка в пространстве игровой вселенной. При движении Солнца глобальные координаты Земли изменятся, но её локальная позиция относительно Солнца (орбита) останется прежней.

Понимание и правильное использование этих систем — основа корректного позиционирования, анимации, физики и работы с иерархиями объектов в Unity.

В чем разница между локальными и глобальными координатами в Unity? | PrepBro