Отладка вращения оси z не равна 0, а в инспекторе - 0 - PullRequest
0 голосов
/ 16 декабря 2018

В инспекторе вращение оси z моего преобразования равно 0.

Но когда я отлаживаю это, используя следующие строки кода:

Debug.Log("local-Euler-z: " + transform.localEulerAngles.z);
Debug.Log("global-Euler-z: " + transform.eulerAngles.z);
Debug.Log("local-rot-z: " + transform.localRotation.z);
Debug.Log("global-rot-z: " + transform.rotation.z);

вы можете увидеть на моем скриншоте, чтоя не получаю 0 в качестве значения.

enter image description here

1 Ответ

0 голосов
/ 17 декабря 2018

Прежде всего, значения, которые вы получаете, действительно малы.xE+/-y - это экспоненциальное представление чисел с плавающей запятой .

Таким образом, в действительности у вас есть что-то вроде этого: 6.349661E-05 == 0.00006349661, что довольно близко к фактическому нулю.

Этопроблема возникает из-за точности чисел с плавающей точкой и потому, что на самом деле есть 2 ноля (-0 & +0) для чисел с плавающей запятой в программировании - именно так все и работает.Я не хочу перегружать этот ответ, если вы хотите прочитать что-то о поплавках - ссылка выше является хорошей отправной точкой.

Из-за этой проблемы float чисел одно и то же число может быть представлено близким, но все же другим представлением типа float.float->int не очень подходит для случаев, когда вы хотите сравнить, скажем, не-внутренние степени, плюс вы не можете сравнивать Quaternion числа, подобные этому - его компоненты (x, y, z, w) имеют значения между 0 и 1. Решитьэту проблему вам либо нужно вручную «сравнить» с плавающей точкой с нулем машины, что довольно сложно для новичка, другое решение - использовать Mathf.Approximately из Unity API.


Кстати, инспектор преобразования показывает вам чистый ноль, потому что он просто отбрасывает такие не влияющие цифры цифры вектора вращения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...