2024.10.23(수)
TMI: 유니티 숙련 주차가 시작되었다. 이번 주차는 [ 강의수강 + 개인 프로젝트 진행 ] 과 같이 진행된다.
이번에는 Send Messages 방식이 아니라 Invoke Unity Events 방식을 사용하여 입력을 받아 볼 것이다.
얼마전에 작성한 New Input System의 Input Action설정 방법과 같이 Input Action을 작성한다.
Input Action 작성 방법: New Input System 사용하기
저번에는 Send Messages를 사용하였지만, 이번에는 Invoke Unity Events방식으로 사용을 해볼 것이다.
Invoke Unity Events 방식은 Button 사용 방식과 유사하다.
Button 사용시 Button의 Inspector 창에서 메서드를 할당해줘야 되는데, Invoke Unity Events도 마찬가지로, 생성한 Input Actions에 대한 이벤트를 Inspector 창에서 할당해주면 된다.
그럼 Send Messages 방식이랑 같은 거 아니냐? 라는 의문이 들 수 있다.
하지만, Invoke Unity Events를 사용하면 script들에서 설정해야 하는 event 시스템을 작성하지 않고, 간단하게 입력이 들어왔을 때, 버튼처럼 메서드들을 할당하면 된다는 장점이 있다.
localEulerAngles
와 eulerAngles
의 차이를 알아보자.
transform.localEulerAngles
는 오브젝트의 부모 오브젝트가 있을 때, 부모의 좌표계 [ 로컬 좌표계 ] 를 기준으로 하는 회전을 Euler 각도로 나타낸다.
transform.eulerAngles
는 오브젝트의 회전을 [ 월드 좌표계 ] 에서 Euler 각도로 나타낸다.
정리하면 localEulerAngles
는 부모의 좌표계를 기준으로 하는 [ 로컬 좌표계 ] 이고, eulerAngles
는 [ 월드 좌표계 ] 를 기준으로 한다.
Euler 각도는 회전을 순차적으로 적용하기 때문에, 회전 순서에 따라 제한되는 Gimbal Lock문제가 발생할 수 있다. 이를 해결하기 위해, Quaternion
을 사용해 회전을 다루는 것이 좋은 방법이다.
localEulerAngles
와 eulerAngles
는 360도를 기준으로 값을 반환한다. 예를 들어, 오브젝트가 -90도 회전했다면, 이 값은 270도로 반환될 수도 있다. 이것은 Unity에서 회전을 0~360도로 관리하기 때문이다.
localEulerAngles
는 회전을 Vector3
를 사용한 Eulor
각도로 표현하고, localRotation
는 Quaternion
으로 회전을 표현한다.Quaternion
은 Euler
보다 안정적으로 회전을 표현하지만, 사람에게 직관적이지 않다. Euler
는 사람에게 직관적이지만, 회전 계산 시 문제가 발생할 수 있다.