Векторы и Физика: Как объекты двигаются в мире Unity
Начало - Понимание Unity и C#
Векторы и физика — это две половины одной монеты. Векторы отвечают за «куда и насколько далеко», а физика — за «как именно это произойдет с учетом массы, гравитации и столкновений». Понимание этой связки превращает вашу игру из набора прыгающих квадратов в живой, отзывчивый мир.
📐 Часть 1. Векторы — язык пространства
Vector3 (и Vector2 для 2D-игр) — это структура, которая одновременно хранит три вещи:- 📍 Точку в пространстве (координаты X, Y, Z)
- ➡️ Направление (куда смотреть/двигаться)
- 📏 Длину (magnitude) — скорость, дистанцию, силу
🔑 Ключевые свойства
csharp
⚡ Готовые вектора (используй вместо new Vector3!)
🧮 Главные операции
csharp
🎯 Полезные методы (не изобретай велосипед!)
csharp
💥 Часть 2. Физика — законы реального мира
Физика в Unity работает через два компонента-напарника: Rigidbody (тело с массой) и Collider (форма). Без Rigidbody объект — просто декорация, которая не реагирует на гравитацию и силы.
🎛️ Настройки Rigidbody
🚀 Три способа двигать Rigidbody
❌ НЕПРАВИЛЬНО: Через transform.position
csharp
✅ СПОСОБ 1: Через скорость (для постоянного движения)
csharp
✅ СПОСОБ 2: AddForce (для импульсов и физичных объектов)
csharp
✅ СПОСОБ 3: MovePosition (для кинематических тел)
csharp
🔍 Часть 3. Raycast — "щуп" для ИИ и стрельбы
Raycast выпускает невидимый луч из точки в направлении и проверяет, во что он уперся. Основа для: стрельбы (hitscan), проверки "земли под ногами", ИИ.
csharp
⚖️ OnCollision vs OnTrigger — вечная путаница
csharp
💡 Шпаргалка: "Что использовать и где?"
⚠️ Золотые правила физики
- Всю физику пиши ТОЛЬКО в
FixedUpdate, а не вUpdate. Иначе физический движок будет вести себя нестабильно на разных FPS. - Всегда нормализуй вектор движения (
normalized), иначе диагональное движение будет быстрее прямого. - Никогда не двигай Rigidbody через
transform.position— используйlinearVelocity,AddForceилиMovePosition. - Для проверок дистанции используй
sqrMagnitude, а неDistanceилиmagnitude— это в разы быстрее (не считает квадратный корень). - Используй LayerMask в Raycast и Physics-проверках, чтобы луч не реагировал на триггеры, триггеры не сталкивались с пулями и т.д.
Комментарии
Отправить комментарий