Unity Camera Pan Issue - PullRequest
       8

Unity Camera Pan Issue

0 голосов
/ 18 апреля 2020

Я пытаюсь заставить систему работать так, чтобы камера могла вращаться вокруг объекта, в то время как я удерживаю кнопку мыши после первоначального увеличения передней поверхности цели.

Это все работает однако я также пытаюсь ограничить вращение X, поэтому я добавил код, который должен дать мне диапазон от -360 до 360, когда я ушел из начальной позиции влево или вправо. Я ожидаю МИНУС, когда я перемещаюсь влево (от начального положения увеличения) и ПЛЮС, когда я перемещаюсь вправо (от исходного положения увеличения). Затем я использую этот результат, чтобы предотвратить дальнейшее панорамирование, если какой-либо из них находится за пределами моих допустимых минимальных / максимальных пределов.

Проблема, которую я получаю, заключается в том, что она работает с некоторыми целями, но не с целями, которые сталкиваются противоположное направление, так как я получаю ПЛЮС, когда я поворачиваюсь влево, и МИНУС, когда я поворачиваюсь вправо (так, наоборот).

Я, очевидно, должен учитывать направление, в котором сейчас находится цель при разработке вращения, но я не уверен, как это сделать.

Я уверен, что это что-то действительно простое, но я не достаточно умен, чтобы знать, поэтому любая помощь будет высоко ценится!

В настоящее время я работаю над суммой, которую я панорамировал:

Vector3 angle = target.position - transform.position;

И вот мой полный код:

    var mouseX = Input.GetAxis("Mouse X");

    //Work out the current angle between the camera and the object we're looking at

    Vector3 angle = target.position - transform.position;

    float actualAngle = angle.x;
    Debug.Log(actualAngle);

    //Allow min -30 degrees when panning to the left
    minXLimit = -30;
    //And max 30 degrees when panning to the right
    maxXLimit = 30;
    if ((actualAngle > minXLimit && actualAngle < maxXLimit && isMoving))
    {
        //No - Allow rotating in either direction horizontally
        if(isMoving) transform.RotateAround(target.transform.position, Vector3.up, mouseX * 1);
    } else
    {
        //Yes, it's more than 30 degrees either left or right
        //Work out which way wer're trying to drag the mouse and whether we should allow rotation further in that direction
        if (mouseX>0 && actualAngle < minXLimit)
        {
            //Don't allow?
        } 
        else if (mouseX<0 && actualAngle < minXLimit)
        {
            //Allow rotating back
            if (isMoving) transform.RotateAround(target.transform.position, Vector3.up, mouseX * 1);
        }
        else
        {
            //Mouse isn't moving

        }

        if (mouseX>0 && actualAngle > maxXLimit)
        {
            //Allow rotating back
            if (isMoving) transform.RotateAround(target.transform.position, Vector3.up, mouseX * 1);
        }
        else if(mouseX<0 && actualAngle > maxXLimit)
        {
            //Don't allow rotating in this direction any further
        } else
        {
            //Mouse isn't moving
        }
    }

    _prevMousePosX = mouseX;

Большое спасибо !

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