2016-07-23 4 views
1

Я пытаюсь увеличить или уменьшить масштаб своего фотоаппарата, но я хочу заблокировать сумму, в которой он может увеличиваться. Я пробовал несколько вещей, хотя они не достигли результата, на который я надеялся. Моя камера сидит с поворотом на 65 градусов по оси X, и я хочу перемещать ее по этой диагональной оси. Заранее спасибо!Зажим Диагональное перемещение/Зажим камеры Zoom

Camera.main.transform.Translate(0,0, Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime); 

Приведенный выше код масштабирует камеру так, как я хочу, хотя я не уверен, как фиксировать значения.

cameraDistance += Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime; 
    cameraDistance = Mathf.Clamp(cameraDistance, minCameraDistance, maxCameraDistance); 
    Camera.main.transform.localPosition = (new Vector3(0, -cameraDistance, 0)); 

Код выше зажимает значение, но движется только в направлении вверх

cameraDistance += Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime; 
    cameraDistance = Mathf.Clamp(cameraDistance, minCameraDistance, maxCameraDistance); 
    Camera.main.fieldOfView = -cameraDistance; 

Код выше зажимает значение и сохраняет мое вращение сосредоточено на игрока, хотя он искажает вид на много.

ПРИМЕЧАНИЕ! Я определенно не хочу менять поля зрения моих камер!

+0

новый Vector3 (0, -cameraDistance, 0) движется по оси y, но, я думаю, вы предпочитаете его на оси z? Попробуйте новый Vector3 (0, whateverHeightYouWant, -cameraDistance) – Absinthe

+0

@Absinthe спасибо за комментарий, который будет работать, хотя тогда мне также нужно было бы рассчитать правильную высоту, и это было то, что я не знал, как это сделать. – jozza710

ответ

1

Вы все еще можете использовать первую строку кода, которая работает, просто добавьте еще немного логики.

//Checks if camera is inside of bounds 
if(Vector3.Distance(Camera.main.transform.position, targetObject.position) >= minCameraDistance && 
    Vector3.Distance(Camera.main.transform.position, targetObject.position) <= maxCameraDistance) { 
    //Do Translation 
    Camera.main.transform.Translate(0, 0, Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime); 
} 
else if (Vector3.Distance(Camera.main.transform.position, targetObject.position) < minCameraDistance) { //Checks if camera is too close to the target 
    Camera.main.transform.Translate(0, 0, Vector3.Distance(Camera.main.transform.position, targetObject.position) - minCameraDistance + Mathf.Epsilon); 
} 
else if (Vector3.Distance(Camera.main.transform.position, targetObject.position) > maxCameraDistance) { //Check if the camera is too far from the target 
    Camera.main.transform.Translate(0, 0, Vector3.Distance(Camera.main.transform.position, targetObject.position) - maxCameraDistance + Mathf.Epsilon); 
} 

Я добавил объект targetObject (Transform variable), который представляет объект, из которого вычисляется расстояние.

Измените это на любой объект или Vector3 для поворота камеры. Пример: если это начало ставить Vector3.zero вместо targetObject.position

Два еще, если утверждения зажимают значения так камера не слишком близко или слишком далеко от значений minCameraDistance и maxCameraDistance.

+0

Спасибо, очень полезно и объяснил очень хорошо! – jozza710

Смежные вопросы