В чем разница между локальными и глобальными координатами в Unity?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между локальными и глобальными координатами в 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);
Ключевые различия и практическое применение
- Зависимость от иерархии:
* **Глобальные**: Не зависят от родительских объектов. `transform.position` объекта останется прежним, даже если сменится его родитель.
* **Локальные**: Полностью определяются родителем. Изменение позиции, поворота или масштаба родителя повлияет на глобальную позицию всех его дочерних объектов, хотя их `localPosition` останется неизменным.
- Масштабирование (Scale):
* Локальный масштаб (`localScale`) объекта умножается на масштаб его родителя, чтобы получить итоговый глобальный масштаб. Это критически важно для корректного отображения сложных иерархий.
- Преобразования (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.