[Unity3D] Character Controller를 이용한 캐릭터 움직임.
Character Controller을 이용해 구현할 움직임은,
1. 오른쪽, 왼쪽, 위, 아래 움직임
2. 캐릭터 점프
3. 경사면 이동
위 3가지를 구현해볼 예정이다.
결과를 보자면 이렇다.
1. 큐브를 하나 만든뒤 Add Component를 통해 캐릭터 컨트롤러를 추가한다.
캐릭터 컨트롤러의 목록을 살펴보도록 하자.
Slope Limit - 콜라이더가 표시된 값 이하의 기울기만을 오르도록 한다.
=> 한 마디로 캐릭터가 경사면과 만났을때 움직일수 있는 각도(기울기)를 말한다. 현재는 45라고 되어있는데, 45도 이하의 경사면을 만났을때 움직일수 있다.
Step Offset - 표시된 값보다 지면에 가까운 경우에만 캐릭터가 계단에 오른다.
Skin Width - 두 콜라이더가 skin Width와 동일한 깊이에서 서로 관통한다. skin Wdith가 커지면 지터가 줄어든다.
skin width가 낮으면 캐릭터가 움직일 수 없게 되는 경우가 있다. Radius가 10%일 때 이 값을 설정하는것이 좋다.
동영상을 보면 이해가 될 것이다.
Min Move Distance - 캐릭터가 표시된 값 미만으로 움직이려 해도 움직이지 않는다.
지터를 줄이는데 사용한다. 대부분 이 값은 0으로 둔다.
Center - 콜라이더의 센터의 x,y,z위치를 조절한다.
Radius - 콜라이더의 반경을 설정한다. 기본적인 폭 조절이라 생각하면 된다.
Height - 콜라이더의 높이. 이 값을 조절하면 위, 아래 방향으로 y축을따라 콜라이더가 확대 및 축소 된다.
스크립트를 하나 작성하여 만든 큐브에 넣도록 하자.
그리고 스크립트를 작성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player2 : MonoBehaviour {
public float speed; // 캐릭터 움직임 스피드.
public float jumpSpeedF; // 캐릭터 점프 힘.
public float gravity; // 캐릭터에게 작용하는 중력.
private CharacterController controller; // 현재 캐릭터가 가지고있는 캐릭터 컨트롤러 콜라이더.
private Vector3 MoveDir; // 캐릭터의 움직이는 방향.
void Start()
{
speed = 6.0f;
jumpSpeed = 8.0f;
gravity = 20.0f;
MoveDir = Vector3.zero;
controller = GetComponent<CharacterController>();
}
void Update()
{
// 현재 캐릭터가 땅에 있는가?
if (controller.isGrounded)
{
// 위, 아래 움직임 셋팅.
MoveDir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
// 벡터를 로컬 좌표계 기준에서 월드 좌표계 기준으로 변환한다.
MoveDir = transform.TransformDirection(MoveDir);
// 스피드 증가.
MoveDir *= speed;
// 캐릭터 점프
if (Input.GetButton("Jump"))
MoveDir.y = jumpSpeed;
}
// 캐릭터에 중력 적용.
MoveDir.y -= gravity * Time.deltaTime;
// 캐릭터 움직임.
controller.Move(MoveDir * Time.deltaTime);
}
}
|
cs |
'Unity3D > Project' 카테고리의 다른 글
[Unity3D] 캐릭터 움직임, 충돌체크, 물리엔진사용 X [Part 4] (0) | 2017.03.02 |
---|---|
[Unity3D] 캐릭터 움직임, 충돌체크, 물리엔진사용 X [Part 3] (1) | 2017.03.02 |
[Unity3D] 캐릭터 움직임, 충돌체크, 물리엔진사용 X [Part 2] (0) | 2017.03.02 |
[Unity3D] 캐릭터 움직임, 충돌체크, 물리엔진사용 X [Part 1] (0) | 2017.02.28 |
유니티란? (0) | 2017.02.25 |