티스토리 뷰


이 글은 PC 버전 TISTORY에 최적화 되어있습니다.


서론

지금까지 이동과 회전을 구현해 보았습니다. 실행시켜보셔서 알겠지만, '이걸 게임이라고 할 수 있어?' 라고 생각하실 겁니다. 이번 강의가 끝나면 '오 좀 게임 느낌나는데?' 라는 생각이 드... 드실 수 있도록 열심히 배워봅시다. 이번 파트에서 배울 것은 오브젝트를 따라다니는 VJ를 만든다고 생각하시면 됩니다. 쉽게 말해 오브젝트를 따라다니는 카메라를 만드는 것입니다.



1. 이동 (Move)

2. 회전 (Rotate)

3. 카메라 추적 (Follow Cam)



스크립트 무작정 따라하기

이번 파트는 무작정 먼저 따라해보도록 하겠습니다. 이해가 어렵더라도 아래서 다시 설명드릴테니 결과로부터 흥미를 찾아봅시다.





위와 같이 FollowCam 이라는 스크립트를 작성해줍니다.














Main Camera에 스크립트를 붙여줍니다.
















그리고 스크립트의 Target에 추적할 오브젝트인 Cube를 붙여줍니다.














실행하면 이전과 달리 게임을 만들기 시작했구나라는 느낌이 물씬 드실겁니다.












파헤치기 : Mathf.Lerp 

재미는 봤지만 우리는 아직 모르는 함수가 너무 많습니다. 먼저 Mathf.Lerp 함수에 대해서 파헤쳐보도록 하겠습니다.



Mathf.LerpAngle(float a, float b, float time) 




a부터 b까지 t시간동안 각도를 부드럽게 회전시킵니다.  즉 tr.eulerAngles.y(카메라의 y축에 대한 오일러 각도) 부터 target.eulerAngles.y(타겟의 각도)까지 지정한 시간까지 회전하는 것 입니다. 회전 시간을 조정하고 싶으면 smoothRotate 변수를 조정하시면 되겠습니다.








파헤치기 : Quaternion.Euler

오일러의 법칙이란 3차원 공간의 절대 좌표를 기준으로 물체가 얼마나 회전했는지를 측정하는 방식입니다. 하지만 X,Y,Z 축을 차례로 회전하기 때문에 짐벌락이라는 회전이 멈추는 현상이 생기게 됩니다. 이를 해결하기 위한 것인 쿼터니언으로 3개의 축을 한번에 회전시킵니다. transform.Rotate(0, 30, 0)과 같은 함수도 유니티 내부에서 쿼터니언으로 자동 변환됩니다. transform.rotation 함수는 Quaternion.Euler를 이용해 오일러를 쿼터니언화 하여 대입하여야 합니다.









파헤치기 : 동작 과정




동작과정은 다음과 같습니다. 
즉, 추적할 대상의 위치로부터 뒤쪽으로 dist만큼 위로 height 만큼 거리에서 촬영하는 것 입니다.


타겟의 포지션 값 - (타겟의 회전을 따라잡는 rot 변수 * 앞 방향 * 띄울 거리) - (윗 방향 * 띄울 거리)
















댓글
  • 프로필사진 유니티학습자 안녕하세요 블로그 잘 보고 있습니다.

    여기에서 현재 대상에 대한 1인칭 시점 과 3인칭 시점으로 수정하고 싶은데 어떤 식으로 접근해야 되나요??
    2019.09.25 11:33
댓글쓰기 폼