2017-12-30 10 views
0

이 주제에 대해 여러 스레드를 보았습니다. 그러나 현재 스크립트에 해당하는 솔루션은 없습니다. 마우스 오른쪽 버튼을 누르고 끌 때 카메라가 회전하도록 카메라를 설정했습니다. WASD 키로 카메라가 움직입니다.수직 카메라 회전 제한

if(Input.GetMouseButtonDown(1)) 
    { 
     // Get mouse origin 
     mouseOrigin = Input.mousePosition; 
     isRotating = true; 
    } 

    if (isRotating) 
    { 
     Vector3 pos = cameraMain.ScreenToViewportPoint(Input.mousePosition - mouseOrigin); 

     transform.RotateAround(transform.position, transform.right, -pos.y * turnSpeed); 
     transform.RotateAround(transform.position, Vector3.up, pos.x * turnSpeed); 
    } 

이 오류는 카메라가 수직으로 자유롭게 회전한다는 것입니다. 이 코드가 카메라에 미치는 영향을 변경하지 않고이 회전에 제한을 적용하는 방법을 알고 싶습니다.

답변

0

카메라 이동 코드를 다시 입력했습니다. 이 함수는 마우스 오른쪽 버튼을 누르고있을 때만이 함수를 호출하기 때문에 실행 중입니다.

public float speed = 10.0F; 
public float RotSpeed = 150.0F; 
public float minY = 0.0f; 
public float maxY = 90.0f; 
float forwardBackward; 
float leftRight; 
float RotLeftRight; 
float RotUpDown; 
Vector3 euler; 

public void CameraRotate() 
{ 
    transform.localEulerAngles = euler; 
    // Getting axes 
    RotLeftRight = Input.GetAxis("Mouse X") * RotSpeed * Time.deltaTime; 
    RotUpDown = Input.GetAxis("Mouse Y") * -RotSpeed * Time.deltaTime; 

    // Doing movements 
    euler.y += RotLeftRight; 

    euler.x += RotUpDown; 

    LimitRotation(); 
} 

public void LimitRotation() 
{ 
    if(euler.x >= maxY) 
     euler.x = maxY; 
    if(euler.x <= minY) 
     euler.x = minY; 
} 
0
if (isRotating) 
{ 
    Vector3 pos = cameraMain.ScreenToViewportPoint(Input.mousePosition - mouseOrigin); 

    pos.x = Mathf.Clamp (pos.x, 0, 90); 
    pos.y = Mathf.Clamp (pos.y, 0, 90); 

    transform.RotateAround("pass center object position", transform.right, -pos.y * turnSpeed); 
    transform.RotateAround("pass center object position", Vector3.up, pos.x * turnSpeed); 
} 
+0

카메라에는 아무런 영향이 없습니다. –

+0

이 카메라에 부착 된이 스크립트입니다. –

+0

이 스크립트는 카메라에 연결되어 있으며 활성화되어 있습니다. Mathf.clamp 문은 아무 것도하지 않습니다. –