[Unity]06.캐릭터 이동

안녕하세요 유랑입니다.



드디어 캐릭터를 이동시켜 보겠습니다.

이전 시간에 만든 지형과 캐릭터를 사용할테니 참고하셔서 따라와주세요.

시작합니다.




1. 캐릭터 이동



캐릭터의 이동에 필요한 코드를 작성해 보겠습니다.

코드는 C#스크립트에서 작성이 가능하며,

그에 따른 부가 설정들도 배워보겠습니다.




1-1) 스크립트 작성



우선 스크립트 폴더 위에 마우스 커서를 올려놓고, 마우스 우측버튼을 클릭합니다.

그러면 다음과 같은 화면이 보이실텐데 C# Script를 선택하고 이름을 PlayerController로 변경합니다.

이 때 중요한건 실수로 이름을 다르게 바꿨을 경우, 프로젝트뷰에서 파일의 이름을 변경하고, 

스크립트내에서도 클래스명을 동일하게 변경하셔야 됩니다.






PlayerController스크립트가 생성되면 다음과 같은 코드들이 보이실겁니다.

Start와 Update는 유니티에서 제공하는 메소드로서 using UnityEngine을 통해서 사용하실 수 있습니다.





코드를 다음과 같이 입력해 보겠습니다.

Input을 통해서 키보드의 상하좌우 값을 입력받고 Debug를 통해서 콘솔창에 출력해 보는 코드입니다.

코드를 작성하시면 꼭 저장시켜 주세요. 그래야 유니티상에서 적용가능합니다.






1-2) 스크립트 적용



하이어라키뷰에서 플레이어를 선택하고 스크립트를 드래그앤 드랍해서 Inspector창에 가져다 놓습니다.

유니티에서는 대부분 드래그앤 드랍을 사용하여 적용가능합니다. 참고하세요.






키보드의 입력값이 제대로 적용되는지 확인해 보겠습니다.

단축키 Ctrl + Shift + C를 누르면 콘솔창 화면이 보이게됩니다.

이 떄 Update()안에서 코드를 작성하였기 떄문에 무수히 많이 값들이 나오게 됩니다.

게임을 중지하거나, 멈춰서 코드를 확인해 보세요.





여기서 잠깐 키보드나, 마우스, 조이패드 같은 입력값들은 어디서 관리할까요?

상단에 있는 툴바 Edit => Project Settings => Input을 누르면 InputManager라는 항목이 생깁니다.

우리가 사용한 Horizontal과 Vertical이 보이실겁니다. 






1-3) 캐릭터 이동 - Translate




입력값도 알아겠다. 캐릭터를 이동시키기 위해서 스크립트를 추가 작성하겠습니다.

코드는 Transform과 Translate가 추가되었는데요.

Transform은 객체의 크기, 위치, 회전을 담당하며 인스펙터 뷰에서 확인가능합니다.

Translate는 객체를 기준으로 어느 방향으로 얼마만큼 이동해! 이라는 뜻이겠죠.

객체의 트랜스폼 정보를 Start함수에서 가져와 Update문에서 입력값이 있을경우 

앞이나 뒤로 이동해라는 코드입니다.








인스펙터 창에 가시면 MoveSpeed가 보이실거에요.

유니티의 장점중 하나가 변수값을 public으로 설정하면 화면에 보여집니다.

테스트를 하거나, 협업할 때 편하겠죠?





만약 public이 아니고 private로 설정 해놓으셨다고 해도,

Debug모드를 통해서 변수들을 확인 가능합니다.






1-4) 캐릭터 회전과 이동 스크립트 개선



회전하는 코드내용과 이동하는 부분을 수정해 보겠습니다.

로테이션용 변수 추가와 전후좌우 벡터 값을 더해서 적용해 보았다.

로테이션은 기존의 Translate 코드와 유사하나, 이동하는 로직이 어려워 진걸 느낄 수 있다.

전후좌우는 벡터 개념으로 합쳐지기에 값이 1보다 넘어가는 경우도 보인다.

이 때 벡터의 방향만 뽑아내는 것이 normalized이다. 

코드를 작성하였으면 실행을 해서 어떤부분이 달라졌는지 알아보자.










2. 카메라 설정




2-1) 카메라 - SmoothFollow



게임을 진행하면 카메라가 따라오지 않아 불편합니다.

카메라 오브젝트를 플레이어 자식으로 두어서 처리해도 괜찮지만,

부드러운 모션을 위해서 SmoothFollow라는 스크립트를 사용해서 처리하겠습니다.






단축키 Ctrl + 9 혹은 툴바에서 에셋스토어를 실행시켜보겠습니다.

에셋스토어는 캐릭터, 지형, 머티리얼 등 다양한 에셋을 보유하고 있는데,

SmoothFollow 스크립트가 들어있는 에셋을 다운받아 보겠습니다.





처음 시작 화면에서 밑으로 내려가다보면 Standard Assetsd이 존재합니다. 다운받아 주세요.




다양한 기능들을 보유한 에셋으로 Standard Assets만 체크하여 Import 시키겠습니다.





받은 에셋 중에 SmoothFollow 스크립트를 선택해 MainCamera에 추가해 주세요.





Target은 당연히 플레이어이며, 높이와 거리를 조절하여 적절한 값을 찾아보자.

그런데 아무리 움직여도 원하는 각도가 나오지 않는다. 

이유는 카메라가 캐릭터의 중심점이 아닌 Pivot을 바라보고 있기 때문이다.





플레이어 오브젝트 밑에 빈 오브젝트를 만들자.

빈 오브젝트를 캐릭터 중심에 넣고, SmoothFollow 스크립트 타겟을 바꾸게 되면 이제 걱정이 없다.

만약 화면상 오브젝트의 위치가 잘 보이지 않아 위치 조정이 어려울 경우 인스펙터창에서 기지모를 이용해 표현 가능하다.

그러나 여러개의 오브젝트를 수정하기 어려운 부분이 있기에 이 부분도 스크립트를 추가해 보겠습니다.






2-2) Gizmos



MyGizmos 스크립트를 만들고 그림을 참고해서 작성해 보세요.

Color를 통해 색깔과 Draw스페어를 이용해 외형 조절이 가능합니다.






해당 오브젝트에 스크립트를 추가해 보고, 인스펙터뷰에서 색깔과 크기를 조절해 보세요.

이렇게 하면 게임뷰에서는 보이지 않지만, 씬뷰에서 보이기때문에 작업할 때 매우 편리합니다.






3. 마무리



오늘은 캐릭터 이동과 카메라에 대해서 다뤄보았습니다.

아직 캐릭터의 움직임에 애니메이션 적용이 안되었기때문에 어색할텐데 

다음 시간에는 애니메이션을 적용하는 시간을 가져보겠습니다.

오늘도 고생하셨습니다.

감사합니다.




수업자료: https://github.com/YouRang12/-Tistory-Unity---Basic


댓글

Designed by JB FACTORY