Обратите внимание, что поскольку кватернионы могут представлять вращения, которые достигают двух полных оборотов (720 градусов), это сравнение может возвращать значение false, даже если результирующие вращения выглядят одинаково.
С Quaternion.operator == Документы Unity
Я бы не стал работать с кватернионами в целом, так как они - боль, которую можно обернуть вокруг головы, и неуклюжий в использовании.
Попробуйте использовать Vector3
представление с eulerAngles
, а затем проверьте приблизительное значение равно примерно так:
//only checks for one axis!
if(Math.Abs(rotationA.eulerAngles.x - rotationB.eulerAngles.x) <= maxDifference)
{
//do stuff
}
Или придерживайтесь Quaternion.Angle
, но используйте это так:
//compares angle directly
if(Math.Abs(Quaternion.Angle(rotationA, rotationB)) <= maxDifference)
{
//do stuff
}
Vector3
состоит из трех внутренних значений float
, а Quaternion.Angle
возвращает значение float
. Сравнение их по точному равенству не сработает в 99% случаев. Сравните их с максимальной разницей, с которой вы в порядке, и она должна работать.