📌
학습 내용
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()이 제일 어려워서 미루고 미뤘던 파트였는데 이번 기회에 확실히 이해하게 됐다.
끗.
'[내배캠] 본 캠프 개발 학습 > 매일매일 쓰는 TIL' 카테고리의 다른 글
11월 6일 수요일 본 캠프 개발 일지 | 결국 못 정했조 팀 프로젝트 (2) (0) | 2024.11.06 |
---|---|
11월 5일 화요일 본 캠프 개발 일지 | 결국 못 정했조 팀 프로젝트 (4) | 2024.11.05 |
10월 28일 월요일 본 캠프 개발 일지 | 개인 프로젝트 (1) (2) | 2024.10.28 |
10월 25일 금요일 본 캠프 개발 일지 (6) | 2024.10.25 |
10월 24일 목요일 본 캠프 개발 일지 | 유니티 숙련 강의 (2) (4) | 2024.10.24 |