Unity возвращает неправильный transform.rotation - PullRequest
1 голос
/ 14 марта 2019

В бесконечной игре-беге, которую я создаю, есть механика, называемая площадкой для прыжков. Это в основном принимает изменение позиции игрока с последнего кадра и преобразует это в угол. Затем он использует это вместе с transform.rotation на панели прыжков, чтобы выяснить, в каком направлении перемещать игрока, как если бы он действительно отскакивал от него.

Этот алгоритм работал бы отлично, за исключением одной проблемы: Unity считывал неправильный transform.rotation. Когда панель перехода была повернута на 45 градусов, она показала 21,92615 (после умножения на Mathf.Rad2Deg.) Когда панель перехода была повернута на 20 градусов, она показала 9,949307.

Сначала я подумал, что по какой-то причине он умножается на неизвестную константу, но, проверив ее в приложении «Калькулятор», обнаружил, что это не совсем так. После еще нескольких экспериментов я обнаружил, что возможные «неизвестные константы», хотя и достаточно близко друг к другу, по-видимому, имеют диапазон от 2 до 2,1. И хотя я не имею ни малейшего понятия о том, как это происходит, похоже, что это замечательно согласуется.

Итак, мой вопрос: с какой проблемой я сталкиваюсь и можно ли как-то ее исправить?
Краткое примечание: я знаю, что это не какая-то другая проблема с кодом, потому что я сократил его до минимума:

public void OnTriggerEnter2D(Collider2D collision){
    Debug.Log(collision.gameObject.transform.rotation.z * Mathf.Rad2Deg);
}

1 Ответ

2 голосов
/ 14 марта 2019

OK.Посмотрев API сценариев для transform.rotation и немного покопавшись, я обнаружил, что он возвращает значение z кватерниона, и исправил его с помощью вызова .ToEulerAngles().

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