quaternion identity что это unity
Русские Блоги
Подробное объяснение кватернионных классов в Unity [подробно]
I. Введение
Кватернион, также известный как кватернион, состоит из четырех компонентов x, y, z и w. Это математическая концепция, открытая ирландским математиком Уильямом Лоуэном Гамильтоном в 1843 году. Умножение кватернионов не соответствует коммутативному закону. С четкой точки зрения кватернионы являются необратимым продолжением множественного числа. Если множество кватернионов рассматривается как многомерное пространство действительных чисел, кватернион представляет собой четырехмерное пространство, а не двумерное пространство для комплексных чисел.
кватернион
Для ознакомления со свойствами кватернионов, их связи с вращением и сферической линейной интерполяцией, пожалуйста, прочитайтеМатематические методы в 3D играх и компьютерной графике-кватернионахНет больше введения здесь. Следующее в основном вводит Quaternion в Unity.
В Unity Quaternion используется для хранения и представления угла поворота объекта. Преобразование кватерниона более сложное: для общего поворота и перемещения GameObject вы можете использовать соответствующие методы в Transform для реализации.
Во-вторых, атрибуты класса Quaternion
eulerAngles- Эйлера углы
Ниже приведен пример, демонстрирующий использование углов Эйлера.
В-третьих, метод экземпляра класса Quaternion
Вы можете создать экземпляр Quaternion от formDirection до toDirection.
Объект GameObject можно преобразовать следующим образом. Сначала направления осей x, y и z собственной системы координат объекта GameObject соответствуют направлениям осей x, y и z мировой системы координат, а затем направление, в котором вектор V1 собственной системы координат объекта GameObject указывает. Поверните к V2.
1.2 PS: Вы не можете напрямую использовать transform.rotation.SetFromToRotation (v1, v2) для установки. Вы можете только скопировать экземпляр Quaternion в transform.rotation.
Результаты показаны на следующем рисунке:
SetLookRotation метод-Установить ориентацию экземпляра Quaternion
Направление transform.forward совпадает с направлением V1.
transform.right перпендикулярен плоскости, состоящей из трех точек Vector3.zer0, V1 и V2.
V2 определяет направление transform.up, потому что после определения направлений transform.forward и transform.right угол между направлением transform.up и направлением V2 всегда меньше или равен 90 градусам.
2.2 PS: Как и выше, не используйте transform.rotation.SetLookRotation (v1, v2) для создания объектов Quaternion.
2.3 Примеры
Метод 3.ToAngleAxis
Угол параметра является углом поворота, а ось параметра является вектором оси.
Эта функция может преобразовать вращение объекта GameObject из состояния Quaternion.identity в текущее состояние. Вам нужно только повернуть объект GameObject вокруг оси (мировой системы координат) на угол.
3.2 Пример демонстрации
В-четвертых, статические методы класса Quaternion
В Quaternion есть девять статических методов: метод угла, метод точки, метод Эйлера, метод FromToRotation, метод Inverse, метод Lerp, метод LookRotation, метод RotateToWards и метод Slerp. Использование статических методов состоит в том, чтобы вызывать их статические методы напрямую с именем класса, например Quaternion.Angle (q1, q2), а также последующий анализ этих статических методов.
1. Угловой метод
Этот метод может вычислить минимальный включенный угол между двумя состояниями вращения от a до b.
1.2 Пример демонстрации
Из выходных данных видно, что значения a1 и a2 равны, то есть возвращаемое значение Angle является минимальным углом между двумя экземплярами Quaternion.
2. Точечный метод умножения точек
Этот метод может оценить соотношение между a и b, соответствующее углу Эйлера, в соответствии с результатом умножения точки.
Например, если есть два кватернионных экземпляра q1 (x1, y1, z1, w1) и q2 (x2, y2, z2, w2), то float f = Quaternion.Dot (q1, q2), то есть f = x1 * x2 + y1 * y2 + z1 * z2 + w1 * w2, диапазон значения результата f равен [-1,1].
2.2 Пример демонстрации
3. Метод Эйлера
Этот метод используется для возврата кватерниона Quaternion q (qx, qy, qz, qw), соответствующего углу Эйлера Vector3 (ex, ey, ez). Соответствующее соотношение выглядит следующим образом:
Известно, что PIover180 = 3.141592 / 180 = 0.0174532925f является постоянным источником света в компьютерной графике, и процесс его преобразования заключается в следующем:
3.2 Проверьте процесс преобразования
Вывод может доказать, что формула верна, кроме того, если преобразованный кватернион выводится напрямую, он выглядит следующим образом:
Выходное значение округляется.
Метод 4.FromToRotation
Метод экземпляра SetFromToRotation был представлен ранее, их функции одинаковы, но использование немного отличается. Чтобы использовать статический метод класса FromToRotation, необходимо вызвать его напрямую с именем класса, например Quaternion.FromToRotation (v1, v2);
Не делай демо здесь!
5. Обратный метод
5.1 Функциональный прототип
Этот метод может вернуть значение обратного кватерниона параметра поворота.
6.Lerp и Slerp методы
6.1 Функциональный прототип
7.RotateTowards метод
7.1 Функциональный прототип
Интеллектуальная рекомендация
[MyBatis] О кеше
Уровень 1 кеш (локальный кеш) По умолчанию он всегда включен. Он действителен после запроса из Mapper и помещения в локальный. Он действителен в сеансе. Например, объект 01 отправляет sql, объект 02 т.
Quaternion identity что это unity
Кватернионы используются для представления вращений.
В Unity все вращения представлены в виде кватернионов. Их использование решает проблему «шарнирного замка» (gimbal lock).
Вникать во внутреннее устройство кватернионов нам нет нужды, мы можем просто их использовать 🙂
И для начала разберемся как получить кватернион из привычных векторов и углов.
Первый способ (углы указываются в градусах):
Второй способ (значения вращения по каждой оси в градусах):
И в случае с методом и в случае со свойством вращение применяется в порядке: Z, X, Y. Стоит это учитывать, чтобы не было неожиданных поворотов
Третий способ (через ось и угл вращения вокруг неё в градусах):
Получить углы Эйлера из кватерниона можно через свойство eulerAngles:
Или можно получить ось и угол вращения вокруг нее:
Теперь разберемся, как с их помощью вращать объекты.
Для этого нужно кватернион, из которого мы хотим повернуть (текущее положение), умножить на кватернион, на который хотим повернуть.
Пример:
Интерполяция
Данный метод возвращает промежуточное вращение между a и b на основе t. При этом значение t ограничивается диапазоном от 0 до 1.
Вернёт a, при t равное или меньше 0.
Вернёт b, при t равное или больше 1.
От предыдущего он отличается только отсутствием ограничений t. Т.е результат выходит за пределы a и b, если t 1.
Картинка для наглядности:
Имеется прожектор, который нужно вращать по кругу, чтобы освещать всю территорию вокруг него.
Используем для решения сей задачи LerpUnclamped: В данном случае прожектор пройдёт полный круг за 4 сек.
Немного изменим задачу.
Прожектор должен освещать не всё вокруг, а только сектор в 90 градусов.
Для этого заменим LerpUnclamped на Lerp. А чтобы прожектор не стопорился в конце, обвернём значение времени функцией Mathf.PingPong:
Задаём направления
Функция FromToRotation (или ее аналог SetFromToRotation) создает такой кватернион, что если его применить к fromDirection, то направление этого вектора совпадёт с toDirection: Обычно используется, чтобы повернуть объект так, чтобы одна из его осей смотрела в нужном направлении.
Функция LookRotation (или SetLookRotation) создает вращение, при котором ось Z сонаправленна forward, а ось Y сонаправленна upwards.
Можно использовать, например, чтобы поворачивать персонажа к целе:
Добавим интерполяцию и регулятор скорости для плавности: На этом всё 🙂
Русские Блоги
[Программирование Unity] Подробный API о кватернионе в Unity
Подробный API о кватернионе в Unity
Кватернион класс
Quaternion (кватернион) используется для расчета вращения Unity. Они компактны и эффективны в расчетах, не имеют блокировок карданного подвеса и могут легко и быстро выполнять сферическую интерполяцию. Unity внутренне использует кватернионы для представления всех вращений.
Кватернион основан на множественном числе и его нелегко понять интуитивно. Но вам вряд ли нужно получать доступ или изменять отдельные параметры кватерниона (x, y, z, w); в большинстве случаев вам нужно только получить и использовать существующее вращение (например, из «Преобразования») или использовать кватернион Число для создания нового поворота (например, плавная вставка между двумя поворотами). Чтобы
В большинстве случаев вы можете использовать следующие функции:
Направление по умолчанию Unity
Прежде чем перейти к API, нам нужно уточнить некоторые основные концепции, то есть то, как выражаются направление и вращение. Чтобы
В Unity используется левая система координат. Если вы объедините мировую систему координат с югом, востоком и северо-западом, это будет примерно так, как показано на рисунке ниже:
Направление по умолчанию соответствует следующей таблице:
Ось | Соответствующее направление |
---|---|
+x | Право (восток) |
-x | Левый (запад) |
+y | на |
-y | под |
+Z | Фронт (север) |
-Z | Назад (юг) |
Предположим, вы стоите на земле и смотрите на север. Это направление по умолчанию, то есть направление в Unity обращено к оси + Z, затем ось + X находится на востоке, а ось + Y соответствует Прямо вверху. Соответствующий угол Эйлера в это время равен (0,0,0), в это время соответствующий передний вектор равен (0,0,1), а верхний вектор равен (0,1,0).
Здесь я различаю концепции влево, вправо, вверх, вниз, вперед и назад, потому что эти концепции также соответствуют соответствующим функциям направления в классе Vector3 и классе Transform.
Обозначение направления
① Обозначение углов Эйлера
Если вы используете набор углов Эйлера для представления поворота, три параметра XYZ представляют поворот соответствующей оси в соответствии с YZX, поэтому (0, 90, 90) представляет поворот оси + Z на 90 градусов, а затем по оси + Y Поверните на 90 градусов. Подробнее читайте в вышеупомянутой статье.«[Программирование в Unity] Вращение Эйлера в Unity»。
② Определите вектор над лицевой
В процессе программирования большую часть времени вам нужно четко указать позицию, вам нужно использовать этот метод. Чтобы определить направление, мы можем использовать два вектора для определения: передний вектор и верхний вектор. Когда передняя и верхняя часть направления определены, направление определяется полностью. Чтобы
Например, если вы указываете только одну ориентацию, то есть теперь вы обращены на север, эта ориентация полностью определена? Очевидно нет. Поскольку вы лежите на земле справа от себя, смотрите на север или смотрите на север, вам нужен другой вектор в это время, а именно верхний. Когда дан вершина, направление полностью определено.
Нужно ли строго указывать вышесказанное?
③Метод определения вращения вокруг оси
④ Представление относительного вращения от A до B
Обратите внимание, что в четырех приведенных выше методах представления некоторые четко указывают верхний вектор, а некоторые, кажется, указывают только передний вектор. Следует ясно отметить, что все они начинаются с вектора по умолчанию. Если верхнее направление четко не указано, используйте Верх по умолчанию, это направление + Y.
Переменные-члены
Статический член
Функция члена
Форма функции | Объяснение |
---|---|
void Set(float new_x, float new_y, float new_z, float new_w) | Задайте для компонентов x, y, z, w ту же функцию, что и [] |
void SetFromToRotation(Vector3 fromDirection, Vector3 toDirection) | Установить результат статической функции FromToRotation |
void SetLookRotation(Vector3 view, Vector3 up = Vector3.up) | Установить результат статической функции LookRotation |
void ToAngleAxis(out float angle, out Vector3 axis) | Установить результат статической функции AngleAxis |
Описание: несколько методов набора функций-членов в основном используются для установки текущего кватерниона на целевой кватернион, а метод построения целевого кватерниона такой же, как статическая функция соответствующего имени.
Статическая функция
Проверьте векторное представление над лицевой стороной
Чтобы убедиться, что векторное представление над лицевой стороной действительно будет пересчитано, я разработал следующий небольшой эксперимент.
Установите на сцену три объекта, их ориентация неупорядочена, слева направо соответствуют 1, 2 и 3. Вы можете использовать следующий код для согласования ориентации трех объектов.
После выполнения вышеуказанного кода в стартовом методе он выглядит следующим образом:
Ориентация трех объектов одинакова, что означает, что верхний вектор действительно пересчитан.
Обобщите несколько методов представления
Следующий код суммирует несколько представлений, соответствующих одному и тому же кватерниону, существует примерно четыре представления.
Другими словами, результаты кватернионов, выраженные в этих формах, в точности совпадают.
Пример применения кватернионного вращения при стрельбе пулей
Код в этом разделе может бытьнажмите, чтобы скачать. Просто полюбите, если сочтете это полезным.
Quaternion.identity
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Submission failed
For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Description
The identity rotation (Read Only).
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
Is something described here not working as you expect it to? It might be a Known Issue. Please check with the Issue Tracker at
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
You’ve told us this page needs code samples. If you’d like to help us further, you could provide a code sample, or tell us about what kind of code sample you’d like to see:
You’ve told us there are code samples on this page which don’t work. If you know how to fix it, or have something better we could use instead, please let us know:
You’ve told us there is information missing from this page. Please tell us more about what’s missing:
You’ve told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You’ve told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You’ve told us there is a spelling or grammar error on this page. Please tell us what’s wrong:
You’ve told us this page has a problem. Please tell us more about what’s wrong:
Thanks for helping to make the Unity documentation better!
Is something described here not working as you expect it to? It might be a Known Issue. Please check with the Issue Tracker at issuetracker.unity3d.com.
Copyright © 2020 Unity Technologies. Publication Date: 2021-02-24.
Погружение в скрипты игрового движка Unity3d, ч.1
Игровой объект
Создание нового игрового объекта с именем MyObject.
Созданный объект будет доступен по ссылку myObject.
Поиск объекта по его имени.
Теги можно использовать для помечания группы объектов со сходными свойствами, либо использующиеся в единой сцене.
Поиск объекта по тегу, возвращает единственный объект:
Возвращает список всех объектов с указанным тегом:
Проверка на наличие у объекта требуемого тега. Возвращает true, если у указанного объекта имеется тег MyTag:
Уничтожение объекта через минуту, после его создания:
Возвращает компонент component, привязанный к объекту GameObject, либо null, если объект не содержит данного компонента. Может использоваться, например, для доступа к другим скриптам, привязанным к объекту.
Возвращает все имеющиеся у объекта компоненты типа componentType.
Привязать компонент myComponent к объекту GameObject и получить ссылку на него.
Положение игрового объекта
Свойство transform объекта GameObject содержит в себе данные о положении объекта в игровом мире.
Возвращает глобальные координаты объекта в игровом мире. Возвращаемая величина имеет тип Vector3, который представляет из себя список из 3 координат — x, y и z:
Переместить объект в точку 0, 10, 0 игрового мира.
Тоже самое, что и в случае глобальных координат, но с локальными. Локальные координаты расситываются относительно родительского объекта. В случае отсутствия родительского объекта локальные координаты совпадают с глобальными:
Поворот объекта в углах Эйлера. Метод также возвращает координаты в виде объекта Vector3:
Тоже самое, что и предыдущий пример, но поворот объекта рассчитывается относительно родительского объекта:
Текущий угол поворота объекта, основанный на кватернионах. Возвращает объект типа Quaternion.
Текущий поворот объекта, основанный на кватернионах, но относительно родительского объекта:
Сброс угла поворота объекта:
Вращаем наш объект в указанную сторону со скоростью 1 градус в секунду. Принимает в качестве координат объект типа Vector3. Метод deltaTime объекта Time содержит время в секундах, затраченное на выполнение предыдущего кадра:
Тоже самое, что и предыдущий пример, но вращение объекта относительно координат родителя:
Перемещаем наш объект в указанном направлении со скоростью 1 юнит в секунду. Также принимает в качестве координат объект класса Vector3:
Физические свойства игрового объекта
Метод rigidbody объекта GameObject хранит в себе его физические свойства. Прежде, чем использовать метод rigidbody, его необходимо добавить к игровому объекту.
Получаем/задаем вектор скорости объекта:
Сила противодействия объекта. Может использоваться для замедления скорости, в среде с отсутствующей силой трения. Наиболее часто используется для замедления падающих объектов, например при создании парашюта. Принимает в качестве параметра целое число:
Задание массы объекту. Рекомендуется использовать массу в пределах от 0.1 до 10. Использование слишком больших значений может привести к непредсказуемым результатам при расчете физики:
Влияние на объект гравитации. Принимает в качестве параметра булево значение. Позволяет отключить влияние гравитации на отдельные объекты:
Влияние физики на игровой объект. Позволяет отключить частично, либо полностью влияние физических законов на объект:
Запрет на вращение объекта. Наиболее часто используется, когда необходимо сохранить определенный угол поворота даже после столкновения с другими объектами:
Указание координат точки центра массы объекта. Применяет координаты в виде уже знакомого нам объекта Vector3.
Использовать ли для объекта обнаружение столкновений с другими объектами. Можно выключить, тогда ваш объект будет игнорировать любые столкновения:
Режим определения столкновений между объектами. Можно указать несколько разных режимов:
CollisionDetectionMode.ContinuousDynamic для быстро движущихся объектов;
CollisionDetectionMode.Continuous для столкновений с быстро движущимися объектами;
CollisionDetectionMode.Discrete (по умолчанию) для обычных столкновений;
В случае отсутствия проблем с определением столкновений рекомендуется использовать свойство по умолчанию.
Задать плотность объекта:
Применить импульс к объекту с указанным вектором. В результате применения импульса объект придет в движение пропорционально силе импульса.
Применить импульс к объекту с вектором в его (объекта) системы координат:
Добавить объекту крутящий момент. Применение данного метода заставит объект вращаться вокруг своего центра масс GameObject.rigidbody.centerOfMass.
Тоже самое, что и предыдущий пример, но относительно координат объекта:
Применение импульса к объекту из внешней указанной точки. Заставляет объект двигаться и вращаться одновременно. Может использоваться, например, для симуляции попадания в объект пули. Первый параметр указывает вектор направления силы, второй параметр — исходную точку направления силы.
Для полноценной симуляции объемных взрывов в Unity3D есть отдельный метод. Первый параметр метода позволяет указать мощность импульса, второй параметр — точку, из которой исходит импульс, третий параметр — радиус распространения импульса, четвертый параметр — модификатор сжатия сферы распространения силы, пятый, необязательный, параметр указывает тип используемого импульса:
Заставить объект «уснуть», и запретить дальнейший расчет физических показателей для него:
Проверить «заснул» ли объект:
«Разбудить» объект для возможности дальнейшего применения влияния физики на него:
Трассировка лучей
Один из самых часто используемых в разработке на Unity3D объект, это Ray. Данный объект позволяет выпустить луч из указанной точки, в указанном направлении, и вернуть некоторые свойства объектов, которых он смог достичь.
Создаем объект класса RaycastHit, который содержит информацию об объекте, с которым столкнулся луч:
Отправляем луч длиной в 50 юнитов из позиции rayPosition в направлении rayVector, и заносим объект, с которым столкнулся луч в переменную hit:
Получаем дистанцию до объекта, с которым столкнулся луч. Дистанция не может быть больше, чем протяженность луча:
Иногда бывает необходимо получить имя объекта, с которым произошло столкновение луча. Наиболее простой способ это сделать:
Для получения тега объекта используем следующий способ:
Unity3D содержит еще множество различных методов и объектов, полезных и не очень. К сожалению полный их обзор увеличил бы и без того объемную статью, поэтому я постараюсь рассказать об остальном более подробно в будущем, если мне представится такая возможность. Я бы хотел пожелать опытным разработчикам побольше интересных проектов, а начинающим — успехов и интересных открытий. Спасибо, что уделили внимание данной статье.