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

Для чего нужен Vector3 Dot?

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

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

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

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

Основное назначение Vector3.Dot в Unity

Vector3.Dot (скалярное произведение векторов) — это фундаментальная математическая операция, возвращающая скалярное значение, которое зависит от длины векторов и косинуса угла между ними. Формула: Dot(A, B) = |A| * |B| * cos(θ), где θ — угол между векторами.

В Unity этот метод применяется в нескольких ключевых контекстах:

1. Определение направления и углов между векторами

Самое распространенное применение — анализ ориентации объектов.

Vector3 toTarget = enemy.position - player.position;
Vector3 playerForward = player.transform.forward;

float dotResult = Vector3.Dot(playerForward, toTarget.normalized);

if (dotResult > 0.5f) {
    // Враг находится перед игроком (угол меньше ~60 градусов)
} else if (dotResult < -0.5f) {
    // Враг позади игрока (угол больше ~120 градусов)
}

Здесь dotResult равный 1 означает "прямо вперед", -1 — "прямо назад", 0 — "строго сбоку".

2. Проверка "видимости" объектов

Часто используется вместе с Raycast для проверки, находится ли объект в поле зрения:

Vector3 directionToTarget = target.position - transform.position;
float dot = Vector3.Dot(transform.forward, directionToTarget.normalized);

if (dot > fieldOfViewAngle) {
    // Цель в поле зрения (fieldOfViewAngle обычно около 0.7-0.8)
}

3. Определение проекций и создания скалярных величин

Dot-продукт вычисляет длину проекции одного вектора на направление другого. Это полезно для:

  • Определения скорости вдоль определенной оси: float forwardSpeed = Vector3.Dot(velocity, transform.forward);
  • Создания отскоков и отражений (вместе с Vector3.Reflect)
  • Реализации физических ограничителей и сил

4. Оптимизация проверок в геймдеве

Скалярное произведение вычислительно дешевле, чем вычисление точного угла через Vector3.Angle или Mathf.Acos, так как:

  • Vector3.Angle внутри использует Mathf.Acos(Vector3.Dot(...))
  • Избегает дорогих операций арккосинуса и преобразований градусы/радианы

5. Определение ориентации в пространстве

Позволяет быстро определить, с какой стороны находится объект:

Vector3 toOtherObject = other.position - transform.position;
float rightDot = Vector3.Dot(transform.right, toOtherObject.normalized);

if (rightDot > 0) {
    // Объект справа
} else {
    // Объект слева
}

6. Визуальные эффекты и шейдеры

В шейдерах скалярное произведение активно используется для:

  • Расчета освещения (модель Ламберта основана на Dot-продукте)
  • Создания rim-эффектов и других визуальных фильтров
  • Маскирования текстур на основе направления взгляда

Ключевое преимущество Vector3.Dot — его математическая универсальность и оптимизированная реализация в движке Unity. Эта операция выполняется на уровне процессора с использованием SIMD-инструкций, что делает ее исключительно эффективной для массовых расчетов в реальном времени — будь то AI-поведение, физические взаимодействия или графические эффекты. Именно сочетание высокой производительности и семантической выразительности делает скалярное произведение незаменимым инструментом в арсенале Unity-разработчика.

Для чего нужен Vector3 Dot? | PrepBro