Поверните объект с помощью RotateAround и задайте ему предел - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть объект в моей сцене, который вращается ( RotateAround ) с помощью мыши. и я хочу дать объекту некоторые пределы вращения, например -45 и 45 градусов для оси X, поэтому, когда его вращение становится 45 градусов, он не может выйти за его пределы.

Итак, я попробовал метод Mathf.Clamp в моем скрипте, как вы видите ниже, и он работает нормально для оси Y, объект вращается вокруг своей оси X и не выходит за пределы Y. но по оси X, когда вращение Y объекта достигает O, оно немедленно изменяется на 30 градусов со странным вращением! Подскажите, пожалуйста, что не так в моем коде?

Скрипты вращения:

float sensitivity = 10f;
Vector3 firstPressPos;
Vector3 secondPressPos;
float minRotationX = 45;
float maxRotationX = 100;
float minRotationY = 30;
float maxRotationY = 30;

void Update () {

    if (Input.GetMouseButtonDown(0))
    {
        //save began touch 2d point
        firstPressPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y);
    }

    if (Input.GetMouseButton(0))
    {
        //save ended touch 2d point
        secondPressPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y);

        if (firstPressPos != secondPressPos)
        {
            float RotX = Input.GetAxis("Mouse X") * sensitivity * Time.deltaTime;
            float RotY = Input.GetAxis("Mouse Y") * sensitivity * Time.deltaTime;
            transform.RotateAround(Vector3.up, RotX);
            transform.RotateAround(Vector3.right, -RotY);

            Vector3 angles = transform.eulerAngles;
            angles.x = Mathf.Clamp(angles.x, minRotationX, maxRotationX);
            angles.y = Mathf.Clamp(angles.y, -minRotationY, maxRotationY);
            angles.z = 0;
            transform.eulerAngles = angles;
        }

    }

}

1 Ответ

0 голосов
/ 01 апреля 2019

В редакторе значения поворота находятся в диапазоне от -180 до 180, но в transform.eulerAngles они на самом деле находятся в диапазоне от 0 до 360.

Так что вам нужно отрегулировать значение угла перед тем, как зафиксировать его.

if(angles.y > 180)
{
    angles.y -= 180f;
}

angles.y = Mathf.Clamp(angles.Y, minY, maxY);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...