Получить угол от горизонтальной и вертикальной оси - PullRequest
1 голос
/ 09 апреля 2019

Попытка реализовать метод для поворота объекта в единицу на основе вертикальной и горизонтальной оси, которая определяется положением курсора на изображении.

Создание 3D-игры для мобильных устройств с джойстиком для элементов управления. Целью является вращение с помощью джойстика. Пример изображения: https://imgur.com/a/hd9QiVe Зеленый круг перемещается при нажатии и возврате пользователя Значения X и Y находятся в диапазоне от -1 до 1, где 0 находится посередине. Просто чтобы визуализировать, как происходит ввод: https://imgur.com/a/8QVRrIh Как показано на рисунке, я просто хочу угол или способ перемещения объекта в направлении, в котором обнаружен ввод пользователя.

Опробовал несколько методов для расчета угла с использованием atan и tan, но мои математические навыки довольно плохие, и я не совсем уверен, что в первую очередь я получаю правильные значения.

// фоновый джойстик ссылается на белый кружок на первом изображении

        pos.x = (pos.x / backgroundJoystick.rectTransform.sizeDelta.x);
        pos.y = (pos.y / backgroundJoystick.rectTransform.sizeDelta.y);
        inputVector = new Vector3(pos.x * 2f, 0, pos.y * 2f);
        inputVector = (inputVector.magnitude > 1.0f) ? inputVector.normalized : inputVector;

// захват оси ввода

public float Horizontal()
{
    if (inputVector.x != 0)
    {
        return inputVector.x;
    }
    else
        return Input.GetAxis("Horizontal");
}

public float Vertical()
{
    if (inputVector.z != 0)
    {
        return inputVector.z;
    }
    else
        return Input.GetAxis("Vertical");
}

Как показано в коде, угол необходим из input.getaxis для вертикальной и горизонтальной ориентации объекта к углу. В настоящее время используемые формулы не дают никаких углов.

1 Ответ

1 голос
/ 09 апреля 2019

Если вы хотите получить угол вектора, используйте Vector2.SignedAngle():

var inputAngle = Vector2.SignedAngle(Vector2.right, inputVector);

Углы являются относительными, поэтому вам необходимо указать Vector2.right в качестве первого параметра.Есть также метод Vector2.Angle(), но он просто возвращает расстояние между двумя углами и не учитывает направление.

Если вам необходимо убедиться, что ваши входные векторы соответствуют вашим,используйте Debug.Log(), чтобы напечатать ваш inputVector.

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