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