본문 바로가기

유니티 게임 개발하기/2D 게임 개발일지

유니티 - 탄막 슈팅 게임을 만들자 (4), Atan을 이용해서 2D에서 lookAt 함수 기능을 구현해보자.

안녕하세요! 윈디입니다.


오늘은 유니티에서 기본으로 제공하는 함수, LookAt에 대해서 이야기를 해보려고 해요.

LookAt은 사실 3D게임을 제작할때는 정말로 유용한 함수죠, 원하는 곳을 바로 볼 수 있으니까요.

하지만 , 2D에서는 잘 적용이 되지 않는데요,

(아무래도 z축이 2D에서는 표시되지 않지만 실제로 존재하기 때문인 것 같습니다만.)

그래서 저희는 어떤 오브젝트가 위치 a로의 방향을 알아내서 직접 볼 수 있는 LookAt2D() 함수를 한번 구현해 볼 겁니다.


사실상 2D에서 저희가 다뤄야할 시계방향, 반시계방향의 각도는 유니티에서는 Z축의 각도입니다.

직접 2D화면에 오브젝트를 올려서 회전해 보시면 바로 알게 되실 거에요.



그렇다면 방향은 어떻게 돌릴까요?


해당 프레임 안에 돌리려면, transform.rotate 를 사용합니다.

Quatanion을 조정하는 방법도 있지만, 사실 많이 복잡하거든요.

깔끔하고 가독성 좋게 rotate를 사용하는 걸 추천드릴게요. 

원래 실상활에서 사용하던 360분각도를 사용해서 훨씬 편합니다.


몇초에 걸쳐 돌리려면(천천히)  -  itween.RotateTo를 사용합니다.


아이트윈에 관해서는 이전 글에 자세히 설명을 드렸기 때문에 참고하시면 될 것 같아요.


이제 방법은 알았고,

a와 b의 위치를 알 때 각도는 어떻게 구할까요?

각도를 알아야 그 방향으로 회전을 시킬 텐데요.



이때는 삼각함수를 사용합니다.


tanθ 다들 기억하시죠? 이 탄젠트는 기울기를 의미합니다.


따라서 탄젠트의 역함수에 기울기를 넣으면 세타가 나오는 것이죠.

각 두 점을 알고있으니, 기울기는 Δy/Δx로 간단하게 나옵니다.

이 탄젠트의 역함수는 atan으로 쓰는데요,


유니티 안에서는 실제로 Mathf.atan2(vecter2()); 로 사용됩니다.

(※ 그냥 atan을 쓰시면 양수 각도로만 나오기 때문에 주의하세요!)


따라서 플레이어가 있는 방향으로 날아가는 탄의 스크립트는 대강 이렇게 되겠습니다.




이걸 적당히 응용하면 이런 탄도 만들수가 있습니다.




▲플레이어 방향으로 계속 탄을 난사하는 패턴입니다.


단순히 탄막의 탄 뿐만 아니라, 굉장히 많은 곳에서 응용할 수 있는 식이 아닐까 싶습니다~!