본문 바로가기
Unity/Unity

유니티(Unity) - 캐릭터 컨트롤러(Character Controller)

by RongBee 2023. 3. 1.

먼저 해야 할 일 - 3D Object에 적용 할 에셋을 미리 다운 받는다.

 

Window -> AssetStore -> Search Online(Blus Button) Click -> Kawaii Slimes(무료) 검색 후 다운

 

Kawaii Slimes Download

 

Window -> Package Manager -> My Assets -> Kawaii Slimes -> Import

 

Asset Import

 

3D Object 생성(Plane, Capsule)

 

  • 이제 Hierarchy에 3D Object(Plane, Capsule)을 생성한다.
  • Plane의 좌표 (0, 0, 0), Capsule의 좌표(0, 1, 0)으로 설정한다.

 

Kawaii Slimes -> Prefabs -> Slime_03

 

  • Project에 Import한 Kawaii Slimes을 클릭 한다.
  • 여러 폴더 중 Prefabs를 클릭하여 Slime_03을 Hierarchy에 드래그하여 확인한다.

 

Slime_03의 Transform 값 변경

 

  • Slime_03을 Player(Capsule)에 드래그하여 포함시킨다.
  • Slime_03의 Position(0, -1, 0), Scale(3.5, 3.5, 3.5)로 변경한다 

 

Slime_03을 할당하면 월드 좌표의 Position이 아니라 Player를 기준으로Position이 설정된다. 

Scale같은 경우는 Slime_03을 할당 후 설정하거나, 할당 전 Player의 크기를 줄여놓고 할당하면

Capsule이 튀어나오지 않게 된다. 

 

 

Player(Slime_03)

 

SlimeController Script 추가

 

SlimeController의 Script에 코드를 작성해보자!

 

SlimeController의 코드

 

  • public으로 선언한 변수들은 Unity Program 안에서 자유롭게 고칠 수 있도록 설정하였다.
  • Update 함수의 moveDir은 Player가 이동해야 하는 방향을 값들을 저장할 Vector3 타입이다.
  • Start 함수의 CharacterController 클래스 타입의 변수 controller는 Player에 할당된 CharacterController  컴포넌트의 기능을 참조하는데 사용될 변수이다.
  • fRow와 fCol은 Player가 수평, 수직 움직임을 나타낼 변수이다.
  • transform.Rotate를 통해 Player의 입력에 따라 y축 주위로 Slime을 회전시킨다.
  • moveDir에 Vector3(0, 0, fCol * fMoveSpeed)를 주어 z축 전방으로 이동하는 속도를 결정한다. 
  • 그 다음 MoveDir Vector는 transform.TransformDirection 함수를 통해 월동 공간으로 변환되며 이동 방향이 Slime의 로컬 좌표가 아닌 전역 좌표를 기준으로 한다.
  • Player가 점프 버튼(기본값은 Space)를 누르면 스크립트는 moveDir.y를 fJumpSpeed로 설정한다.
  • fGravity * Time.deltaTime만큼 y를 줄임으로써 Slime에 중력을 적용한다.
  • moveDir Vector는 Time.deltaTime으로 값이 조정되고 지정된 방향으로 Slime을 이동시키는 Controller.Move 메서드로 전달한다. 

 

이제 Slime Controller 스크립트와 Physics의 Character Controller 컴포넌트를 할당한다.

Physics -> Character Controller

 

그 후 실행하고 Player가  space 키를 누르면 점프하는 모습을 지켜보자!

space 키를 누르자 점프하는 Player의 모습

 

이로써 우리의 Player는 점프를 할 수 있게 되었다!

'Unity > Unity' 카테고리의 다른 글

유니티(Unity) - 객체 이동(Object Move)  (0) 2023.02.18

댓글