Успех!
Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.
Ошибка внесения изменений
По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста попробуйте снова через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.
Функция отражения векторов в Unity (C#):
Данная функция возвращает вектор, значение компонентов которого равны отражению вектора inDirection в плоскости с нормалью inNormal.
Пример:
В данном случае reflectObject будет «отражением» объекта, на котором висит скрипт. «Зеркалом» будет плоскость OXY (т. к. ось Z является нормалью данной плоскости).
Расстояние
Для нахождения расстояния между двумя точками в Unity есть функция:
Использовать можно, например, для проверки возможности атаки.
Проекция
Функция проекции в Unity (C#):
Возвращает проекцию вектора a на вектор b.
Для чего может пригодиться?
Пример:
Летит самолёт скинуть груз на остров, мы знаем скорость самолёта, его координаты, знаем координаты острова. Нам нужно рассчитать время, через которое самолёт долетит.
Формула расчёта: время = расстояние/скорость. Скорость мы знаем, расстояние можем найти функцией Vector3.Distance, но. Самолёт выше острова и ему не требуется приземляться, чтобы скинут груз, поэтому рассчитанное время будет больше, чем на самом деле, т. к. будет учитываться высота. Для избежания этой проблемы можно использовать проекцию, в этом случае разницы в высоте не будет, и можно спокойно измерить расстояние, которое самолёт пролетит.
Функция для получения угла между векторами в Unity (C#):
Можно использовать для проверки, находится ли объект в поле видимости:
Можно ли вычислить фактический угол между двумя 3D-векторами в единстве? Vector3.Angle дает самый короткий угол между двумя векторами. Я хочу знать фактический угол, рассчитанный по часовой стрелке.
Это должно быть то, что вам нужно. a и b — векторы, для которых вы хотите вычислить угол, n будет нормалью вашего самолета, чтобы определить, что вы бы назвали "по часовой стрелке/против часовой стрелки"
Для простоты я повторно использую Vector3.Angle , а затем вычисляю знак от величины угла между плоской нормалью n и поперечным произведением (перпендикулярным вектором) a и b .
Это просто, если вы просто используете сложение и вычитание. Посмотрите на это:
Вот что я имею в виду: если мы по часовой стрелке, а угол отрицательный, например. -170 Чтобы сделать это 180, вы используете это уравнение. "180- | угол | +180" вы уже знаете, что угол отрицательный, поэтому используйте "180 — (- угол) +180" и добавьте 180 "360 + угол". Затем, если он по часовой стрелке, ПРОДОЛЖИТЬ, но если он против часовой стрелки, сделайте угол отрицательным, это связано с тем, что другая часть угла 360 (что является дополнением 360 + угол) составляет "360 — (360 + угол)" или "360 — 360 — угол" ИЛИ "(360 — 360) — угол" и, опять же, ИЛИ "- угол". Итак, мы идем. ваш готовый угол.