Математика для игры: выбрать нужную операцию
Направление, координаты, плоскости, плавное движение, генерация и пути: короткий маршрут по задачам.
От задачи к операции
| Задача | Что использовать | Руководство |
|---|---|---|
| Направить объект к цели | Цель − начало; при необходимости Normalized | Векторы |
| Проверить сторону или спроецировать точку на плоскость | Нормаль, Plane.DistanceTo, Project | Плоскости |
| Перевести точку из локальных координат в мировые | Transform × точка, ToGlobal/ToLocal | Преобразования |
| Плавно приблизиться или двигаться с заданной скоростью | Lerp с весом по времени либо MoveToward | Интерполяция |
| Повторить генерацию или продолжить последовательность | RandomNumberGenerator.Seed/State | Случайные числа |
| Двигаться по маршруту | Curve2D, Path2D, PathFollow2D | Кривые и пути |
| Повернуть 3D-объект и понять масштаб родителя | Entity3D, Basis, Quaternion | Преобразования 3D |
Vector2/Vector3 хранят числа, а смысл задаёте вы: позиция, направление, скорость или нормаль. Позиция (10, 0) — точка; скорость (10, 0) — смещение в единицах за секунду. Одинаковый тип не делает эти величины взаимозаменяемыми.
Соглашения Reckfell
В обычном 2D X направлен вправо, Y — вниз. В 3D Y направлен вверх, стандартное направление вперёд — −Z. Углы методов вращения и Rotation задаются в радианах; RotationDegrees предназначено для градусов. Вектор Vector3.One не является единичным направлением: его длина равна √3.
У каждой операции должны совпадать пространство и единицы. Нельзя вычесть мировую позицию цели из локальной позиции игрока и получить корректное направление. Скорость умножают на время шага один раз. Геометрическая проекция на плоскость не заменяет запрос физического столкновения.
Проверить понимание
Начните с примера, относящегося к вашей задаче. В каждом указан тип корня, полный C#-файл и ожидаемый результат. Изображения сняты с этих примеров в Windows-сборке 1.0.0, подписи есть на RU/EN. Проверки охватывают математические соглашения и жизненный цикл объектов в движке; это не подтверждение физической симуляции, производительности или одинаковых битов на всех платформах.
Для сравнения float используйте допуск, подходящий масштабу задачи. IsFinite отсеивает NaN/бесконечность, но не доказывает, что матрица обратима или нормаль имеет длину 1. Сначала проверьте условия операции, затем её результат.