-
[유니티] 8강 캐릭터의 이동[유니티] 기본 2022. 5. 30. 21:30728x90
1강에서 7강까지 내용으로 이번에는 캐릭터의 움직임을 구현해보겠습니다.

바로 리소스를 프로젝트에 폴더에 드래그 & 드롭으로 옮깁니다.
그리고 애니메이션등의 작업을 편하게 하기 위해서 UI를 변경을 했습니다.

사람마다 편한 UI가 있을텐데, 저는 이게 더 편합니다. 프로그래밍 할때, 왼쪽에 WorkSpace 같은 탐색기가 왼쪽 위치해 있고, 오른쪽에 코드를 작성하는게 익숙해져서 그런것 같습니다.
디폴트로 설정한것 보다 훨씬 안정감이 드는것 같습니다. 개인적인 취향이니, 편하신데로 하시면 됩니다.
이제 화면 비율을 설정해볼까 합니다. 유튜브나 흔히들 가장 많이 쓰는 비율인 16:9를 선택했습니다.


Hierachy에서 [마우스 우클릭]으로 빈객체를 만들었습니다.


이제 Scripts폴더를 생성하고 해당 디렉토리에 Hero.cs파일을 만든 다음, 방금 만든 객체 Hero에 추가해봅시다.

Hero.cs파일을 열어서 코드를 작성합니다.

12라인 - 이동하는 속력을 설정합니다. 5라고 설정했는데, 이건 1초에 5만큼 이동한다는 의미입니다. 즉 5/1초 입니다.
13라인 - 이전 프레임시간과 현재 프레임시간과의 간격을 Time클래스를 통해서 구할수 있습니다.
만약 이번에 흐른 시간이 0.1초라면, 0.5만큼 이동하겠습니다. 따라서 이동량은 speed * Time.deltaTime 됩니다.
15~16라인 - 종횡의 움직임을 -1 ~ +1 값으로 받습니다. 거기에 속력을 곱하는 형식입니다.
17~18라인 - 둘 중 각각 실행해보면 결과는 같습니다. 근데 과연 어떤게 더 나을까요? 원래 프로그래밍 하시는 분들이라면 18라인이 상당히 불편한 코드입니다.
그리고 상당히 불쾌한 부분이 또 있습니다. 운동에너지가 너무 마음에 안듭니다.
만약 대각선으로 이동하게 되면 1.414*speed 속력을 가지게 됩니다. 이걸 1차적으로 고쳐보겠습니다.

코드는 맞는거 같은데, 방향키를 떼고도 캐릭터가 움직입니다.
여기서 가장 자연스럽게 바꾸는 방법은 (x,y)의 크기가 1보다 클때만 단위벡터로 만드는겁니다.
19라인에서 if( length > 1 ) 로 바꾸면 깔끔하게 완료가 됩니다.
방금 한 움직임은 이동시작할때나 이동끝날때 속력이 증가하거나 감소하는데, 증감없이 바로 속력이 항상 1이고 싶게 하고 싶은 경우도 많습니다.

25라인이 바뀐점도 살펴보시길 바랍니다.
캐릭터의 이동 방향은 1을 넘지 말아야 합니다.(단위벡터)
구한 방향에 속력을 곱해서 이동량을 결정합니다.
다음 강의에는 캐릭터의 스프라이트를 다뤄보겠습니다.
-끗-
'[유니티] 기본' 카테고리의 다른 글
[유니티] 10강 Canvas(텍스트) (0) 2022.05.30 [유니티] 9강 스프라이트 애니메이션 (0) 2022.05.30 [유니티] 7강 Scene 전환시 값의 공유, 유지 및 저장 방법 (0) 2022.05.30 [유니티] 6강 Scene 전환 (0) 2022.05.30 [유니티] 5강 컨트롤러(키보드, 마우스) (0) 2022.05.30

