Поворот камеры вокруг персонажа (вверх и вниз) Unity3D

#unity3d #camera #rotation

#unity-игровой движок #камера #поворот

Вопрос:

У меня есть скрипт, который перемещает камеру от третьего лица, я заставил камеру поворачиваться вправо и влево вместе с персонажем, но я не могу заставить камеру поворачиваться вокруг персонажа вверх и вниз, камера просто включается сама!

 public float mouseSensitivity;
public bool invertMouse;
public bool autoLockCursor;

public Transform cam;
public Transform RotationX;
float x;

void Awake () {
    Cursor.lockState = (autoLockCursor)?CursorLockMode.Locked:CursorLockMode.None;
}

void Update () {
    //Rotates the player left and right along with the camera
    this.gameObject.transform.Rotate(Input.GetAxis("Mouse Y") * mouseSensitivity * ((invertMouse) ? 1 : -1), Input.GetAxis("Mouse X") * mouseSensitivity * ((invertMouse) ? -1 : 1), 0);
    this.gameObject.transform.localEulerAngles = new Vector3(0 , this.gameObject.transform.localEulerAngles.y, 0);
    //rotates an example object to get its transformer and uses it to rotate the camera
    RotationX.gameObject.transform.Rotate(Input.GetAxis("Mouse Y") * mouseSensitivity * ((invertMouse) ? 1 : -1), Input.GetAxis("Mouse X") * mouseSensitivity * ((invertMouse) ? -1 : 1), 0);
    RotationX.gameObject.transform.localEulerAngles = new Vector3(RotationX.gameObject.transform.localEulerAngles.x, RotationX.gameObject.transform.localEulerAngles.y, 0);
    x = RotationX.gameObject.transform.localEulerAngles.x;
    cam.gameObject.transform.localEulerAngles = new Vector3(x , 0, 0);

    if (Cursor.lockState == CursorLockMode.None amp;amp; Input.GetMouseButtonDown(0))
    {
        Cursor.lockState = CursorLockMode.Locked;
    }
    else if (Cursor.lockState == CursorLockMode.Locked amp;amp; Input.GetKeyDown(KeyCode.Escape))
    {
        Cursor.lockState = CursorLockMode.None;
    }
}
  

Ответ №1:

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

     this.gameObject.transform.Rotate(Input.GetAxis("Mouse Y") * mouseSensitivity * ((invertMouse) ? 1 : -1), Input.GetAxis("Mouse X") * mouseSensitivity * ((invertMouse) ? -1 : 1), 0);
    this.gameObject.transform.localEulerAngles = new Vector3(this.gameObject.transform.localEulerAngles.x ,0 , 0);