유니티

유니티 05. CharacterController 기반의 오브젝트 이동

채채_._. 2024. 5. 9. 17:20

CharacterController 컴포넌트

- 3차원 게임에서 사람 형태의 캐릭터 움직임과 관련된 제어를 위해 사용.

- 캡슐 형태의 충돌 범위가 포함됨.

  • lope Limit : 올라갈 수 있는 경사 한계 각
  • tep Offset : 설정 값보다 낮은 높이의 계단을 오를 수 있음.
  • Center : Capsule 충돌 범위의 중심점
  • Radius : Capsule 충돌 범위의 반지름
  • Height : Capsule 충돌 범위의 높이

 

게임 월드 구성, 플레이어 캐릭터 제작

- 배포가 되었던 패키지를 다운 받아 불러옴.

- prefab의 gameworld를 hierarchy로 불러와 게임 월드 생성.

 

- gameworld를 한 눈에 보기 위해 메인 카메라를 수정.

- 수정한 후 player 캐릭터를 생성.

 

Mesh Renderer

- 3D 게임 오브젝트가 화면에 보이게 하는 컴포넌트.

  • Albedo : 게임 오브젝트에 보여질 이미지 설정
  • Color :  게임 오브젝트에 보여질 색상 설정

 

3D 게임 오브젝트에 이미지, 색상을 설정하기 위해서는

1. material asset을 생성 및 이미지와 색상 설정

2. 설정이 완료된 material asset을 Mesh Renderer 컴포넌트에 등록

[결과]

- 오브젝트의 충돌범위가 CharacterController에 의해서 정해진 것을 알 수 있음.

 

플레이어 캐릭터 이동

- CharacterController.Move(Vector3 motion);

  : 매개변수로 이동방향, 속도, Time.deltaTime 등의 세부적인 이동 방법을 설정하면 이동을 수행.

 

- CharacterController.SimpleMove(Vector3 speed);

  : 매개변수로 3 방향의 이동속도를 넣어 호출하면 이동을 수행 가능.

 

- MoveTo 함수 매개변수로 방향정보를 가져오게 되면 해당 방향 정보를 moveDirection에 저장하는 코드.

 

- 플레이어를 제어하는 스크립트.

- player 오브젝트에 적용하면 방향키에 따라 플레이어가 이동함.

 

중력 적용

- movement3D에 중력 계수 설정 및 CharacterController.isGround를 사용.

- if 문 경우 gravity가 음수이기에 y축 이동방향 계속 감소.

- CharacterController.isGround

  : 발 위치의 충돌을 체크해 충돌이면 true / 아니면 false 값을 나타내는 변수

 

- 모두 수정하여 적용시키면 플레이어를 올리면 자꾸 아래로 중력이 작용하여 떨어지는 것을 확인할 수 있음.

 

플레이어 캐릭터 점프

- movement3D 에 jump 변수 설정.

- JumpTo 함수를 설정하여 캐릭터가 바닥에 있으면 movedirection.y 값에 jumpforce를 대입하는 코드.

 

- jumpKeyCode에 대한 변수 설정.

- PlayerController 스크립트에 update 함수에 JumpTo를 호출하는 if 문 추가.

 

경사면 이동과 계단 이동

- Slope Limit은 경사각도

- 계단의 서로 인접한 두개 단 사이의 높이가 Step Offset 이하일 때 계단을 올라갈 수 있음.

 

- Step Offeset 0.4로 설정했을 경우 올라갈 수 있음.

'유니티' 카테고리의 다른 글

유니티 06. Navigation Mesh 응용  (0) 2024.05.15
유니티 06. Navigation Mesh 기초  (0) 2024.05.15
유니티 05. 2D Tilemap - Extras  (0) 2024.05.09
유니티 05. 2D Tilemap Editor  (0) 2024.05.08
유니티 04. 2D 애니메이션 실습  (0) 2024.05.01