오늘의 학습 키워드
낮과 밤 구현 해석, 1인칭 회전
공부한 내용
낮과 밤
다음과 같은 코드를 해석하려고 그림을 그려가면서 그리고 유니티에서 어떻게 동작하는가 보면서 이해해보았다.
Update에서 불리는 time이 더해지면서 1로 나누는 로직에 따라 라이팅의 회전이 변하는 코드이다.
time = (time + timeRate * Time.deltaTime) % 1.0f;
lightSource.transform.eulerAngles = (time - (lightSource == sun ? 0.25f : 0.75f)) * noon * 4.0f;
가장 중요한 부분은 해가 뜰 때를 이해하는 것이었다.
해가 뜰 때 기준으로 6시니 time은 0.25겠고 lightSource가 sun이니 0.25f - 0.25f == 0이니까 각도가 0으로 나오게 된다.
이것만 이해해도 다른 것들이 이해가 될 것이다.
여기서 이해가 가지 않는다면 낮 12시에 해의 각도가 90도(위에서 아래로 내리쬐는 각도)라는 것을 기억하면서 그림을 봐보자.
1인칭 카메라 회전
1인칭 카메라 회전을 구현할 때 x축과 y축의 순서 또는 짐벌락 현상 때문에 고생을 한 적이 있을 것이다.
여기 예제에서는 y축 회전을 transform.eulerAngles로 부모에서 처리하고 x축 회전을 localEulerAngles로 자식에서 처리하는 것으로 각 회전이 독립적으로 수행될 수 있도록 하였다.
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);
}
부모와 자식의 x,y 회전 값을 반대로 수행한다면 안 되는 것을 볼 수 있었다.
찾아보니 이것은 유니티의 회전 순서 때문인 것으로 파악이 된다.
z -> x -> y 순으로 진행해야 제대로 회전이 될 수 있다.
그래서 여기서 알 수 있는 사실은 부모 자식간의 회전은 자식이 먼저 실행 된 뒤 부모가 실행된다.
void CameraLook()
{
camCurXRot += mouseDelta.y * lookSensitivity;
camCurXRot = Mathf.Clamp(camCurXRot, minXLook, maxXLook);
cameraContainer.localEulerAngles = new Vector3(0, mouseDelta.x * lookSensitivity, 0);
transform.eulerAngles += new Vector3(-camCurXRot, 0, 0);
}
오늘의 회고
오늘은 낮과 밤 시스템과 1인칭 회전에 대해서 배웠다. 낮과 밤 시스템은 처음에 이해하기 어려웠으나 전자 보드에서 쓱쓱 그려보고 대충 개념을 잡은 뒤 나중에 정리하면서 피그마로 그려봤는데 이해가 된 것 같아 다행이다. 또한 1인칭 회전은 왜 저렇게 수행하는지 이유를 몰랐었는데 이번에 정확히 알게 되어서 기분이 좋다.
내일은 좀 더 공부를 진행한 뒤 개인 과제를 수행할 계획이다. 시간이 많지는 않아서 최대한 빨리 진행하려고 생각하고 있다. 내일도 열심히 해보자. 파이팅!
참고 :
'스파르타 Unity 1기' 카테고리의 다른 글
내일배움캠프 32일차 TIL - 캐릭터 UI에 띄우기, 스크롤 뷰 사이즈 자동화 (0) | 2023.09.20 |
---|---|
내일배움캠프 31일차 TIL - NavMesh.SamplePosition (0) | 2023.09.19 |
내일배움캠프 29일차 TIL - Quaternion과 벡터의 곱셈, LayerMask, 연산자 우선순위 (0) | 2023.09.15 |
내일배움캠프 28일차 TIL - Static Batching, Dynamic Batching, Gpu Instancing (0) | 2023.09.14 |
내일배움캠프 27일차 TIL - CustomEditor (0) | 2023.09.13 |