본문 바로가기

프로그램 공부/Unity 컴포넌트

Character Controller

: 캐릭터를 쉽게 움직이는데 사용하는 컴포넌트.

Rigidbody 물리가 많이 사용되지 않는 캐릭터의 이동 처리 경우에 주로 사용.

Rigidbody와 Collider 컴포넌트를 조합해서 만드는 것보다 여러 가지 편리한 기능을 제공한다.

코드처리에 자신이 있는 경우 Rigidbody를 이용한 물리처리 이동보다 캐릭터의 컨트롤러를 사용하는 것이 더 사용하기 편할 수 있다.

프로퍼티 기능
Slope 해당 오브젝트가 올라갈 수 있는 기울기를 제한
Step Offset 표시된 값보다 낮은 위치에 있을 경우에만 계단을 오름
Skin Width

블로킹 처리시 충돌체 모양보다 얼만큼 더 밀어 낼지 결정하는 것

값이 커질수록 지터(Jitter)가 줄어든다.

지터(Jitter) : 덜덜 떨다. 조금씩 움직이다.

값이 너무 낮으면 캐릭터가 움직일 수 없게 되는 경우가 있다.

Min Move Distance

표시된 값 미만으로는 움직이지 않음

지터를 줄이는데 사용할 수 있음. 보통은 0으로 둔다.

Center Charater Controller에 포함된 캡슐 콜라이더의 좌표
Radius 캡슐 콜라이더의 크기
Height 캡슐 콜라이더의 높이

 

- 특징

: 블로킹을 해주는 충돌체가 있지만 트리거와 비슷하다.

또한 캐릭터가 회전하더라도 충돌체는 기본 모양 그대로이다.

Capsule Collider를 내장하고 있음

 

 

- Character Controller 이동 함수 - CharacterController.Move

: 캐릭터 컨트롤러가 Collider의 블로킹 처리가 되려면 Transform 이동 함수를 사용하면 안되고, Move 함수를 사용해야 한다.

this.CharCon.Move(inputVec * moveSpeed * Time.deltaTime;

Move함수는 월드 좌표 기준이기에, 이동할 거리를 로컬기준으로 계산했으면 월드로 변경하고 매개변수로 전달하자.

 

 

- Charater Controller에 중력 적용

: Rigidbody와는 다르게 중력에 대한 처리가 없어 직접 만들어 넣어야 한다.

//중력 가속도 개념을 배제하고 아래로 내려가게 만드는 것
moveVec += Vector3.down * 9.82f * Time.deltaTime;

 

 

- Character Controller 충돌 결과 - CollisionFlags

: CollisionFlags를 선언하여 Move함수의 결과 값을 리턴받을 수 있다.

아무것도 충돌 안됬을 때 None = 0
벽에 충돌하였을 때

Sides = 1

CollidedSides = 1

위로 충돌하였을 때

Adove = 2

CollidedAbove = 2

바닥 충돌하였을 때

Below = 4

CollidedBelow = 4

해당 값들이 2의 승수인 것은 플래그를 통하여 결과를 알 수 있게 하기 때문이다.

 

바닥 충돌일 경우 큐브의 경사가 높으면 벽으로 처리 될 수 있음

위 충돌의 경우 점프 시 위에 닿으면 점프 파워를 제거하여 점프 처리를 전환하는데 사용할 수 있음

 

 

- OnControllerColliderHit(ControllerColliderHit _hit)

: 물리적인 반응을 처리하고 싶을 때 사용하는 함수

Rigidbody rigid = hit.collider.gameobject.GetComponent<Rigidbody>(); 를 사용해 충돌한 물체의 리지드 바디를 얻어올 수 있다.

 

 

- SimpleMove() 함수

: 이동방향 파라미터만 넘겨주면 중력은 자동으로 처리해주는 함수

Vector3 dir; //바라보는 방향
float speed; //이동하는 속도

//dir 벡터의 방향으로 초당 speed만큼씩 이동
Getcomponent<CharacterController>().SimpleMove(dir * speed);

 

 

'프로그램 공부 > Unity 컴포넌트' 카테고리의 다른 글

Graphic Raycaster  (1) 2019.06.28
Image  (0) 2019.06.28
파티클 시스템 (Particle System)  (0) 2019.05.25
Collider  (0) 2019.05.23
Rigidbody  (0) 2019.05.23