Вы не получаете желаемый результат из-за сравнения. Не следует сравнивать значения с плавающей запятой / векторы / кватернионы, используя "==". Поскольку они основаны на поплавках и часто они не будут достаточно точными. Даже клонированные объекты будут иметь значения с плавающей запятой 1.000001 или 0.999999.
Лучшим вариантом будет для векторов использовать «Vector3.distance» или «Vector3.Equals», а для Quternions вы можете использовать «Quaternion.Angle» или Quaternion.Equals для проверки соответствующего результата.
т.е. obj.transform.position.Equals(objToCompare.transform.position)
& obj.transform.quaternion.Equals(objToCompare.transform.quaternion)
. Это должно вернуть правильные результаты, но есть вероятность, что результаты могут не совпадать
если это произойдет, вы можете использовать
т.е. Vector3.Distance(obj.transform.position, objToCompare.transform.position) < "Margin of difference"
.
Quaternion.Angle(transform.rotation, rotation)<"Margin of difference"
Вы можете указать свое собственное значение, например, для допустимой разницы.
Примечание : если вам нужно решение с меньшей нагрузкой на процессор, вам следует использовать
(obj.transform.position -
objToCompare.transform.position).sqrMagnitude
что быстрее чем
.Distance, потому что .Distance должна вычислять квадратный корень, который
очень медленно.
Вот несколько ссылок для продолжения:
Vector3 Сравнить
Quaternion Сравнить
Обновление:
public static bool CompareTransformsData(GameObject objToCompare)
{
List<GameObject> results = allobj;
foreach (GameObject obj in results)
{
//Method 1 using Equal
if( obj.transform.position.Equals(objToCompare.transform.position) &&
obj.transform.rotation.Equals(objToCompare.transform.rotation))//Do confirm here if the vectors & quaternions are able to use equal comparer & result is satisfactory to your needs
{
return true;
}
//Method 2 using sqrmagnitude & Quaternion.angle
//Use this one if you need more acurate result and control on objects
//modify the 0.1f paramters for more accuracy and filtering
if ((obj.transform.position - objToCompare.transform.position).sqrMagnitude < 0.1f &&
Quaternion.Angle(obj.transform.rotation, objToCompare.transform.rotation) < 0.1f)//Do confirm here if the vectors & quaternions are able to use equal comparer & result is satisfactory to your needs
{
return true;
}
}
return false;
}
Используйте любой из них, но не используйте оба.