2016-05-07 2 views
4

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

void Update() { 
    float mouseX = Input.GetAxis("Mouse X"); 
    float mouseY = -Input.GetAxis("Mouse Y"); 

    rotY += mouseX * mouseSensitivity * Time.deltaTime; 
    rotX += mouseY * mouseSensitivity * Time.deltaTime; 

    desiredy = Camera.main.transform.eulerAngles.y; 
    desiredx = Camera.main.transform.eulerAngles.x; 

    if (!(desiredy < maxy && desiredy > miny)) 
    { 
     //i dont know what to put in here, i have tried everything 
    } 


    else if (!(desiredx < maxx && desiredx > minx)) 
    { 
     //i dont know what to put in here, i have tried everything 
    } 

    else 
    { 
     localRotation = Quaternion.Euler(rotX, rotY, 0.0f); 
     transform.rotation = localRotation; 
    } 
} 

ответ

3

Вы делаете это сложный с вашей ненужной логикой. Все, что вам нужно, это функция Mathf.Clamp, которая гарантирует, что ваше значение находится в указанном диапазоне.

void Update() 
{ 
    rotateCamera(); 
} 


public float xSensitivity = 100.0f; 
public float ySensitivity = 100.0f; 

public float yMinLimit = -45.0f; 
public float yMaxLimit = 45.0f; 

public float xMinLimit = -360.0f; 
public float xMaxLimit = 360.0f; 

float yRot = 0.0f; 
float xRot = 0.0f; 

void rotateCamera() 
{ 
    xRot += Input.GetAxis("Mouse X") * xSensitivity * Time.deltaTime; 
    yRot += Input.GetAxis("Mouse Y") * ySensitivity * Time.deltaTime; 
    yRot = Mathf.Clamp(yRot, yMinLimit, yMaxLimit); 
    Camera.main.transform.localEulerAngles = new Vector3(-yRot, xRot, 0); 

} 
+0

я попробовал странно, что до сих пор не работал его рабочий ... Кстати спасибо –

+0

@ onion123 Вероятно потому, что вы использовали 'transform.rotation' вместо' transform.localEulerAngles' – Programmer

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