안녕하세요! 윈디입니다.
오늘은 유니티에서 기본으로 제공하는 함수, 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을 쓰시면 양수 각도로만 나오기 때문에 주의하세요!)
따라서 플레이어가 있는 방향으로 날아가는 탄의 스크립트는 대강 이렇게 되겠습니다.
이걸 적당히 응용하면 이런 탄도 만들수가 있습니다.
▲플레이어 방향으로 계속 탄을 난사하는 패턴입니다.
단순히 탄막의 탄 뿐만 아니라, 굉장히 많은 곳에서 응용할 수 있는 식이 아닐까 싶습니다~!
'유니티 게임 개발하기 > 2D 게임 개발일지' 카테고리의 다른 글
유니티 - 탄막 슈팅 게임을 만들자 (8) - 몬스터를 관리하는 오브젝트 풀링! (0) | 2015.10.02 |
---|---|
유니티 - 탄막 슈팅 게임을 만들자 (7) UI 만들기 - 상태와 점수 표시 (3) | 2015.09.01 |
유니티 - 탄막 슈팅 게임을 만들자 (6), 충돌, 그 불필요한 연산을 삭제하기. 연출을 사용하자! (1) | 2015.08.09 |
유니티 - 탄막 슈팅 게임을 만들자 (5), 프레임 드랍을 해결하기. (0) | 2015.07.24 |
유니티 (C#스크립팅) - 코루틴이 잘 안 돌아가는 경우들 정리 (0) | 2015.07.17 |
유니티 - 탄막 슈팅 게임을 만들자 (3), itween 사용하기 (0) | 2015.07.06 |
유니티 - 탄막 슈팅 게임을 만들자(2), 이벤트(Event)와 Delegate 의 사용 (2) | 2015.06.27 |
유니티 - 탄막 슈팅 게임을 만들자(1), Sin(),Cos()과 Mathf 의 사용 (0) | 2015.06.27 |
유니티 - 스크립트 함수의 실행순서 (Awake와 OnEnable) (0) | 2015.06.15 |
유니티(C#스크립팅) - 코루틴. 코루틴. Coroutine의 이해. (3) | 2015.06.13 |