Input.GetAxis (“Mouse X / Y”)를 사용하여 카메라를 회전시키는 방법은 무엇입니까?


13

마우스로 회전하는 1 인칭 카메라를 만들고 싶습니다.

나는 보았다 Input.GetAxis 스크립팅 API 페이지와 내 게시물의 하단에 포함되어있는 샘플 코드를 발견했다. 그것을 시도했을 때, 나는 그것이 원했던 것과 동일한 기본 기능을 가지고 있지만, 특히 마우스를 원으로 움직일 때 카메라를 xz 평면에 평행하게 유지하지 않는다는 것을 깨달았습니다. 잠시 후 카메라가 이상한 각도에 놓이고 플레이어는 완전히 당황했습니다!

카메라 움직임을 제한하는이 코드에 빠른 수정이 있습니까, 아니면 카메라를 회전시키는 더 좋은 방법이 있습니까?

 using UnityEngine;
 using System.Collections;

     public class ExampleClass : MonoBehaviour {
         public float horizontalSpeed = 2.0F;
         public float verticalSpeed = 2.0F;
         void Update() {
             float h = horizontalSpeed * Input.GetAxis("Mouse X");
             float v = verticalSpeed * Input.GetAxis("Mouse Y");
             transform.Rotate(v, h, 0);
         }
     }

짐벌 락과 같은 소리가납니다. 오일러 각도를 회전에 사용할 때 발생합니다. 솔루션을 제공하기 위해 몇 가지 테스트를 수행해야합니다. 기본적으로 쿼터니언을 사용해야합니다. 그들은 짐벌 잠금으로 고통받지 않습니다.
퍼지 로직

쿼터니언을 사용하여 회전하는 방법은 무엇입니까? transform.rotation = Quaternion.Slerp (-Input.GetAxis ( "Mouse X"), Input.GetAxis ( "Mouse X"), Time.deltaTime * freeLookTurningSpeed);를 시도했습니다. 그러나 그것은 나에게 오류를 주었다.
환생

좋아, 나는 시험을했다. 다행히도 짐벌 락이 아닙니다. 솔루션을 답변으로 게시하겠습니다.
퍼지 로직

답변:


18

문제는 기존 회전을 직접 추적하고 각 업데이트를 교체하는 대신 기존 회전을 업데이트한다는 것입니다.

회전을 업데이트하면 새 회전이 이전 회전과 결합되어 예기치 않은 동작이 발생합니다.

해결 방법은 누적 된 회전을 추적하고 업데이트 할 때마다 새 값으로 회전을 완전히 재설정하는 것입니다.

여기에 답변이 있습니다 .Unity Answers : 카메라 잠금 방법

근무 코드 :

using UnityEngine;
using System.Collections;

public class FirstPersonCam : MonoBehaviour {

    public float speedH = 2.0f;
    public float speedV = 2.0f;

    private float yaw = 0.0f;
    private float pitch = 0.0f;

    void Update () {
        yaw += speedH * Input.GetAxis("Mouse X");
        pitch -= speedV * Input.GetAxis("Mouse Y");

        transform.eulerAngles = new Vector3(pitch, yaw, 0.0f);
    }
}

주요 차이점 :

  • 누적 된 값을 추적 할 수 있도록 로컬 메소드 변수 대신 요와 피치를 클래스 멤버로 저장하십시오.
  • 각 업데이트를 누적하려면 + = 및 / 또는-=를 사용하십시오.
  • 회전 (이전 회전에 새 회전을 적용 함) 대신 eulerAngles (각 업데이트마다 회전 값을 덮어 쓰려면)를 사용하십시오.

천만에요. 내가 게시 한이 솔루션이 원래의 문제를 해결 한 경우 답변으로 수락해야합니다. 새로운 문제에 대한 도움을 받으려면 새로운 질문을 게시하여 문제를 정리하고 다른 사람들이 비슷한 문제를 겪고있을 때 다른 사람들이 도움을 받거나 질문을 찾을 수 있도록해야합니다. 주석 영역은 확장 된 대화를위한 것이 아닙니다. 건배.
퍼지 로직

0

빈 게임 오브젝트의 카메라 자식을 만들면 어떻게 될까요? 그런 다음 한 스크립트로 UP 벡터를 기준으로 빈 게임 오브젝트 회전을 관리합니다. (MouseX) 다른 게임 스크립트를 카메라 게임 오브젝트에 적용한 경우 오른쪽 벡터 (MouseY)를 기준으로 회전을 관리합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.