내일배움캠프 17일차 TIL : Quaternion과 삼각함수, Input System

김정환·2024년 10월 7일
0

키워드

  • New Input System
  • Quaternion과 삼각함수

Unity 입문 강의 주차를 50% 정도 공부했고
오늘 배운 것은 크게 2가지이다.

New Input System

  • 기존 Input Manager를 이용한 방식에 다음과 같은 한계가 있어
    Unity가 새로 추가한 Input System을 이용하는 방법을 배웠다.

한계

  1. 리바인딩의 어려움
    Unity는 기존에 InputManager라는 형태로 사용자로부터 입력을 받을 수 있었다.
    단, 이렇게 사용하면 게임 내에서 조작 키를 사용자가 변한대로 리바인딩할 경우 매우 까다롭다는 문제가 있다.

  2. 코드 정리
    InputManager의 문제는 아니지만, 사용함에 따라서 InputManager가 다른 객체와 깊은 연관 관계로 코딩을 하다보니 로직이 난잡해진다는 문제가 생겼다.
    가령, 플레이어 클래스에서 Input을 받을 때 Update() 내에 바로 작성하는 경우들이 그것이다.
    이는 유지보수와 가독성에 좋지 않다.

대안

Unity에서 최근 새로운 Input System을 지원하기 시작했다.
이를 이용한다면 약간의 사전 작업을 거치면 게임 내에서 자유롭게 리바인딩과 SRP를 고려한 코드 작성을 시도해볼 수 있다.
자세한 내용

Quaternion

오일러각

우리가 가장 직관적으로 인식하는 회전에 대한 값이 오일러각(Euler Angle)이다.
단, 짐벌 락 문제가 있어 많은 SW에선 이 문제를 우회한 Quaternion을 사용한다.

  • 3축 체계에서 회전 중에 특정한 각도에서 2개의 축이 겹쳐져 축 하나에 대한 회전을 소실하는 문제.

쿼터니언

  • x, y, z (3축) + w (스칼라 요소)로 구성되고 3축에 각 축에 대한 허수 단위 벡터를 곱하여 4차원 공간에서의 회전을 나타낸다.
  • 짐벌 락 문제의 원인인 각 축의 의존 관계를 해소하여 독립성을 가져와 문제를 우회했다.
  • 허수 단위 벡터가 계산에 이용되다 보니 직관적인 수체계가 아니다.
    즉, 오일러각처럼 직관적으로 값을 바꾸는 것은 지양해야한다.
    사용법

삼각함수와 역삼각함수

게임 개발에선 다양한 수학이 적용되며 그 중 자주 나오는 것이 벡터를 이용한 계산이다.
가령 점A에서 점B까지의 거리 계산이나, 점A에서 다른 점 B까지 회전하도록 하는 것들이 그것이다.
오늘은 두 점에 대한 계산에 이용할 수 있는 다른 방법을 배웠다.

삼각함수

직각삼각형에서 각도 θ에 대한 변의 길이의 비율을 얻을 수 있다.
각도를 통해 비율을 알아내는 방법.

  • 삼각함수 : 각도 -> 비율
  • 사인 sin = 높이 / 빗변
  • 코사인 cos = 밑변 / 빗변
  • 탄젠트 tan = 높이 / 밑변

역삼각함수

직각삼각형에 대해서 삼각함수가 성립한다.
그렇다면 이를 역으로 사용하는 방법도 성립하는데 그것이 역삼각함수이다.
비율을 통해 각도를 알아내는 방법.

  • 삼각함수의 역함수
  • 역삼각함수 : 비율 -> 각도
  • 어떤 두 점이 있다면, 한 점으로부터 X축에 직각에 해당하는 변을 그어 높이를 얻을 수 있다.
    => 두 점이 있다면, 그에 해당하는 직각삼각형을 그릴 수 있다.
    => 두 점을 통해서 빗변, 높이, 밑변의 길이를 얻을 수 있으므로 각도를 계산할 수 있다.

아크탄젠트

  • 탄젠트에 대한 역함수 : Atan
  • Atan을 확장하여 x,y의 음수 여부에 따라서 360를 구분할 수 있게 된 것 : Atan2
  • Math.Atan2(y,x)을 적용하면 [-π(180), π(180)]까지의 값을 얻을 수 있음.

결론

  • 점A(0,0)과 점B(x, y)가 있을 때, 두 점으로 x축에 대한 선분 AB의 각도를 알 수 있는 것.
  • Atan2를 활용해 객체가 특정 방향을 향하도록 만들거나 두 점 사이의 각도를 계산할 때 유용.
    자세한 내용

#내일배움캠프 #스파르타내일배움캠프 #스파르타내일배움캠프TIL

profile
사파 개발자

0개의 댓글