[Unity3D] 캐릭터 움직임, 충돌체크, 물리엔진사용 X [Part 1]

※ 주의 

이 글은 아마추어가 개인적으로 생각하여 작성하는 것으로, 이곳에 나오는 내용을 맹신하지 않는것을 당부드립니다.

 

 

메뉴

 

1. 움직임 적용.

- Horizontal을 이용한 움직임.

 

2. 중력 적용.

- 점프에 의한 중력.

- 낙하에 의한 중력.

 

3. 충돌 적용. (레이 캐스트로 충돌체크.)

- 점프로 인한 위쪽블록과의 충돌.

- 낙하로 인한 블록과의 충돌.

- 오른쪽, 혹은 왼쪽으로 움직일때에 벽과 충돌.

 

4. 점프

- 점프로 인한 충돌체크 및 중력적용.

 

5. 좌,우 충돌체크.

 

 

 

 

1. 움직임

 

처음은 플레이어의 움직임을 구현해야 한다.

플레이어는 좌, 우로만 움직일 것이다.

 

메뉴탭에Edit - Project Settings - Input - Axes 에는 키 입력에 대한 여러가지 정보가 들어있는데,

그 중 Horizontal은 x값 / 좌, 우(←,→) 키 입력에 대한 정보가 들어있다.

 

이 정보를 받아서 현재 입력 받은 키가 무엇이며, 어떤 방향인지 정보를 가져와 플레이어 움직임에 적용할 것이다.

 

※ 다른 키 입력 정보

- Vertical : y값 / 위, 아래(↑,↓)에 대한 정보.

- Jump : Spacebar(스페이스바)

 

Horizontal을 가져오는 방법은 

Input.GetAxis("Horizontal");을 통해 가져올수 있다.

 

이 값은 반환하는 값이 있는데, 눌리는 키에 방향에따라 다른 값을 반환한다.

 

왼쪽 키(←)    : 0 ~ -1

오른쪽 키(→) : 0 ~ 1

입력 X          : 0

을 반환한다.

 

움직이려는 방향(벡터)을 알아내었다면 어떤 속력으로 움직일지 정해야 한다.

float Speed 변수를 하나 만들어주어 어떤 속력으로 움직일지 임의로 정하면 된다.

 

그리고 마지막으로 프레임당 호출 횟수를 고려하여 Time.deltatime을 곱해 시간을 보정해준다.

 

 

 

더보기
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Player : MonoBehaviour {
 
    // 공개
    public float Speed;             // 좌, 우로 움직이는 스피드.
 
    // 비공개
    private Vector2 Pos;            // 플레이어가 실직적으로 움직일 좌, 우 벡터를 저장할 변수.
 
    private float H;                // Horizontal.
 
    // 각종 값 초기화.
    void Init()
    {
        Pos = Vector2.zero;
        H   = 0;
    }
 
    void Start()
    {
        Init();
    }
 
    void Update()
    {
        H = Input.GetAxis("Horizontal");
        Move();
    }
 
    // 좌, 우 움직임.
    void Move()
    {
        Pos.Set(H * Speed, Pos.y);
        transform.Translate(Pos * Time.deltaTime);
    }
}
cs

 

 

 

플레이어에 대한 인스펙터 정보

 

 

 

결과.

 

 

 

다음은 중력적용을 시켜보도록 하자.