본문 바로가기

[내배캠] 본 캠프 개발 학습/매일매일 쓰는 TIL

10월 30일 수요일 본 캠프 개발 일지 | 개인 프로젝트 (end)

📌

 개인 과제를 제출했다. 작업 시간은 3일 정도였고, 필수 기능만 구현하는 것에 성공했다. 강의 코드를 그대로 썼지만 강의를 최소 2번씩 보면서 코드를 이해하려고 많이 노력했다. 이번 작업물에선 따로 새롭게 구현한 게 없어서 해설 영상을 보면서 TIL을 작성하려고 한다.
학습 내용 

 

1. Look 구현 
2. 체크리스트 


1. Look 구현 

   private void LateUpdate()
   {
       if (canLook)
       {
           CameraLook();
       }
   }

	public void OnLookInput(InputAction.CallbackContext context)
    {
        mouseDelta = context.ReadValue<Vector2>();
    }

	void CameraLook()
    {
        camCurXRot += mouseDelta.y * lookSensitivity;
        camCurXRot = Mathf.Clamp(camCurXRot, minXLook, maxXLook);
        cameraContainer.localEulerAngles = new Vector3(-camCurXRot, 0, 0);

        transform.eulerAngles += new Vector3(0, mouseDelta.x * lookSensitivity, 0);
    }

 

각각의 함수를 살펴보자. 

 

✅ OnLookInput() 

 사용자가 마우스로 방향을 전환할 때 호출되는 함수로, moseDelta 변수에 .ReadValue<T>()로 Vector2(수직, 수평)의 마우스 이동량을 받아온다.  이때
Delta 는 단위 시간 동안의 변화량을 의미한다. 따라서 mouseDelta는 정확히 이전 프레임에서 현재 프레임까지 마우스가 몇 픽셀 움직였는지 체크하고 있다. 

 

 Q. Value 값을 받아온다면 이동량이 아니라 현재 마우스 위치(절대 위치) 값이 저장되는 게 아닌가?

 A. context.ReadValue<Vector2>()는 마우스의 절대 위치가 아니라, 마우스 이동량을 반환한다. 내부적으로 마우스 위치를 프레임마다 확인하고, 이전 프레임과 비교하여 위치 차이를 계산하는 시스템. 

 Q. 그럼 절대 위치를 받아오는 함수는? 
 A. Input.mousePosition;

 

✅ LateUpdate()

 

다른 Update 함수가 끝난 뒤 작동하며, 매 프레임마다 작동한다.  

 

✅ CameraLook()

 

 실제 카메라 회전을 처리하는 함수이다. 빠른 이해를 돕기 위해 민감도 등 변수는 생략한 코드로 살펴보겠다.

	void CameraLook()
    {
    	// 상하회전 (X축 회전)
        camCurXRot += mouseDelta.y;
        camCurXRot = Mathf.Clamp(camCurXRot, minXLook, maxXLook); // 회전량 제한 
        cameraContainer.localEulerAngles = new Vector3(-camCurXRot, 0, 0);

		// 좌우회전 (Y축 회전)
        transform.eulerAngles += new Vector3(0, mouseDelta.x, 0);
    }

 

카메라의 상하 회전 (x축 회전):

camCurXRot 변수를 mouseDelta.y 값을 대입한다. 

cameraContainer.localEulerAngles를 조정하여 카메라의 수직 각도를 조절해 상하 회전을 적용한다. 이때 localEulerAngles는 오브젝트의 로컬 공간에서의 회전 각도를 나타내는 속성이다. 위 함수에서는 현재 오브젝트의 로컬(자신 기준) 회전 각도를 Vector3로 반환하고 있다. 

Q. 왜 camCurXRot가 아니라 -camCurXRot?

A. Unity에서는 카메라의 x축 회전이 음수일 때 카메라가 위쪽을 향하고, 양수일 때 아래쪽을 향한다. 따라서 camCurXRot에 음수를 곱해 localEulerAngles.x에 넣으면 카메라가 올바른 방향으로 회전하게 된다. 

 

캐릭터의 좌우 회전 (y축 회전):

 

transform.eulerAngles를 사용하여 캐릭터 자체를 y축을 기준으로 회전한다. 이때 eulerAngles는 Unity에서 오브젝트의 월드 공간에서의 회전 각도를 나타내는 속성이다. 

 

2. 체크리스트 

✅ 베이직반 TIL 정리 
✅ ReadMe 작성법 TIL 정리


 

 움직이는 플랫폼까지 정리하려고 했지만 시간상 여기까지만! 
 InputSystem 중에서 Look()이 제일 어려워서 미루고 미뤘던 파트였는데 이번 기회에 확실히 이해하게 됐다. 

 끗.