Learning
When: 1학년 4월 27일
How:
개인 프로젝트를 하다가 오브젝트를 회전시킬 일이 생겼는데, 회전을 하는 것 안에 엄청나게 여러 가지 개념들이 있는 것을 알고 그 일부를 배웠습니다.
Understanding:
일단 gameObject.rotation 값은 쿼터니언으로 이루어지는데, 쿼터니언을 GPT에게 물어보니, 저 같은 초보는 그냥 숫자 4개를 사용하여 오일러 값보다 훨씬 깔끔하게 회전시킬 수 있는, 컴퓨터가 실제로 계산하는 회전을 나타내는 값이라고 합니다. 그리고 오일러 값은 한 축을 기준으로 우리한테 익숙한 ‘도’ 단위를 사용하여 회전을 나타내는 값입니다.
물체를 회전시킬 때, 그냥 Rotate() 메서드를 사용하여 오일러 값만 사용해 회전시킬 수도 있겠지만, 저는 회전값을 이용해 총알이 나가는 방향이 결정되기 때문에 조금 더 깊게 파야 할 것 같다는 생각이 들었고, 물체의 회전에 대해 살짝 더 공부해보았습니다.
일단 처음엔 마우스를 향하는 오브젝트의 방향을 벡터로 나타낸 후, 그것을 쿼터니언으로 바꾸는 방법을 공부했습니다.
일단 마우스를 향하는 오브젝트의 방향은 그냥 마우스 - 오브젝트로 벡터를 빼면 값이 나옵니다. 그리고 벡터 값은 normalized를 사용해 정규화한 다음, Mathf.Atan2() 메서드에 벡터 값의 y, x를 넣어 라디안 값으로 바꾼 후, 그 라디안 값에 Mathf.Rad2Deg를 곱하여 도 단위로 바꿀 수 있습니다. 그리고 그 도 단위는 그냥 바꾸고 싶은 축의 오일러 값으로 바꿀 수 있습니다. 마지막으로 그 오일러 값을 Quaternion.Euler() 메서드에 인수로 넣으면 쿼터니언 값으로 바꿀 수 있습니다.
이것으로 Vector2 값에서 Quaternion 값으로 바꾸는 방법을 정리해 보았습니다. 이 글을 볼 미래의 저에겐 미안하지만 깔끔하게 정리할 시간은 없었습니다.
Result: 벡터에서 쿼터니언까지의 변환. Vector2 → (Mathf.Atan2(y, x)) → rad → (Mathf.Rad2Deg) → deg → (new Vector3(0, 0, deg)) → Euler → (Quaternion.Euler(Euler)) → Quaternion
'UnityEngine' 카테고리의 다른 글
| [Unity] 코드에서 GameObject 가져오기 (0) | 2025.05.06 |
|---|---|
| [Unity] OnTrigger, OnCollision 메서드 실행 (0) | 2025.05.02 |
| [Unity] 여러가지 이동 방식 (0) | 2025.05.02 |
| [Unity] Monobehaviour 스크립트의 구동 (0) | 2025.04.28 |
| [Unity] 게임 오브젝트 회전 순서 (0) | 2025.04.26 |