В бесконечной игре-беге, которую я создаю, есть механика, называемая площадкой для прыжков. Это в основном принимает изменение позиции игрока с последнего кадра и преобразует это в угол. Затем он использует это вместе с 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);
}