유니티 엔진 - 게임 프로젝트/타워 디펜스 게임

카메라 - 1) 카메라의 이동과 회전

monstro 2026. 6. 23. 15:13
728x90
반응형

- 개요

카메라의 이동회전을 수행하는 로직을 추가한다

 

- 애셋 작업

1) InputActions 애셋

 

위와 같이 Camera 액션 맵을 추가하고 필요한 Action들과 Action들을 실행할 키를 설정한다

  • Zoom 액션 + 마우스 스크롤
  • Move 액션 + WASD 키와 화살표
  • HoldClick 액션 + 마우스 스크롤 클릭
  • Rotate 액션 + 마우스 오른쪽 클릭

 

2) 카메라 오브젝트

 

카메라 오브젝트에 PlayerInput 컴포넌트를 추가하고 1)에서 생성한 InputActions 애셋을 사용하도록 설정한다

또, Action에 따른 콜백함수를 호출하는 방식을 Invoke Unity Events로 설정하여

에디터에서 Action에 대한 콜백함수를 바인드한다

 

- 스크립트 작업

1) CameraController 클래스

 

카메라 이동과 관련된 멤버변수를 추가한다

  • moveSpeed 멤버변수 : 카메라의 이동속도
  • moveInput 멤버변수 : Move 액션에 연결된 키의 입력값

 

 

카메라 회전과 관련된 멤버변수를 추가한다

카메라는 마우스 우클릭을 누르고 있는 상태에서 기준점을 기준으로 회전한다

  • rotateSpeed 멤버변수 : 카메라의 회전속도
  • focusPoint 멤버변수 : 회전 기준점
  • minPitch 멤버변수 : 최소 상하회전각도
  • maxPitch 멤버변수 : 최대 상하회전각도
  • maxFocusPointDistance 멤버변수 : 카메라 기준점과의 최대거리
  • yaw 멤버변수 : 카메라의 상하회전각도
  • pitch 멤버변수 : 카메라의 좌우회전각도
  • isRightButtonPressed 멤버변수 : 마우스 오른쪽클릭되었는지 판단

 

 

Start 함수에서 필요한 멤버변수들의 값초기화한다

 

 

Action에 바인드할 콜백 함수들을 위와 같이 추가한다

OnMove 함수WASD 키와 화살표 키의 값을 읽어와 저장한다

OnRotate 함수마우스 오른쪽 키를 누르고 있는지 판단하여 값을 저장한다

 

 

HandleCameraMovement 함수를 위와 같이 구성한다

카메라의 로컬 좌표 월드 좌표로 변경하고 ProjectOnPlane 함수에 넘겨주어 평면에 투영된 방향을 생성한다

이후 방향에 속도를 곱하여 벡터를 생성하고 생성된 벡터를 통해 카메라 기준점을 이동시킨다

 

 

HandleCameraRotation 함수의 로직은 위와 같다

마우스 오른쪽 버튼을 누르고 있다면, Input System 방식으로 커서의 이동 변화량을 가져와 저장한다

이후 숫자 데이터로 통제가 가능한 쿼터니언을 사용하여 카메라의 회전위치를 설정한다

 

 

UpdateFocusPointFromScreen 함수의 로직을 위와 같이 구성한다

마우스 오른쪽 버튼을 클릭하지 않은 상태에서 회전 기준점을 설정한다

카메라에서 Raycast를 수행하여 적중했다면 기준점의 위치적중한 위치로 설정한다

 

 

LateUpdate 함수를 추가하여 카메라의 트랜스폼을 설정한다

우선, 회전 기준점을 먼저 설정하고 카메라의 회전, 카메라의 이동을 진행한다

 

- 애셋 작업

1) 카메라 오브젝트

 

이전에 추가한 PlayerInput 컴포넌트의 Event 항목에서 위와 같이 Action에 대한 콜백함수를 연결한다

 

- 최종 실행 결과

728x90
반응형