본문 바로가기
유니티 Unity/유니티 기능 구현

[유니티] Rigidbody(리지드바디)로 플레이어 움직임 구현하기 - 1

by TODAYCODE 2021. 9. 10.
반응형

이번에는 리기드바디를 활용해서 3D 게임에서 플레이어의 움직임을 구현해보고자 한다.

이를 위해선 리지드바디에 대한 기본적인 이해가 필요하므로, 만약 리지드바디를 잘 모른다면 이전 글을 참고하면 된다.

2021.09.09 - [유니티 Unity/유니티 기능 구현] - [유니티] Rigidbody(리지드바디) 기본 속성 값 파악하기

 

유니티로 3D 캐릭터의 움직임을 구현할때 리지드바디와 캐릭터컨트롤러 둘 중 하나를 주로 사용하는 편이다.

리지드바디로 플레이어를 생성할 때 주의할 점은,

원점(좌표계가 존재하는 위치)를 캐릭터의 발끝에 위치시켜줘야한다는 점이다.

 

그렇게 해야하는 이유는 캐릭터를 어떤 좌표로 이동시켰을 때,

원점이 발끝이어야만 해당 좌표에서 땅을 딛고 발부터 표현되기 때문이다.

아무튼 여러가지 이유로 원점이 발끝에 존재해야만 다양한 기능 구현을 추가로 진행할 때 굉장히 수월해진다.

따라서 진행과정은,

1. 원점이 발끝에 존재하는 플레이어 만들기

2. 스크립트를 통해서 움직임을 구현하기

이렇게 될 것이다.


 

Rigidbody를 사용하여 움직임 구현하기

 

 

1. 플레이어가 움직일 땅을 만든다.

나는 큐브를 하나 생성해서 넓고 납작하게 변경해주고 머터리얼을 하나 넣어서 땅처럼 보이게 만들었다.

만약 큐브로 Ground를 생성했다면 Scale 값중 Y 값의 절반만큼 위치값 중 Y를 -방향으로 이동시켜주자.

반드시 해야할 필요는 없는데, 이걸 안하면 땅의 두께때문에 새로 생성한 오브젝트들이 땅에 묻힌채로 생성된다.

 

 

2. Create Empty 를 생성하고 이름을 Player로 변경한다.

보통 플레이어 캐릭터를 만들때는 Create Empty를 생성하고 그 하위에 오브젝트들을 추가하는 식으로 진행한다.

이렇게 해야 관리하기가 편리하기 때문이다.

아무튼 생성이 되었다면 이름을 Player로 변경해준다.

 

 

3. 캡슐 콜라이더를 하위에 추가해준다.

Player에 마우스 커서를 올린 뒤 우클릭을 하여서 3D Object - Capsule을 클릭하여 추가해준다.

 

 

4. 캡슐 수정

방금 추가한 캡슐콜라이더를 선택하고 인스펙터창의 값들을 수정해야한다.

Transform의 Position에서 Y축 값을 1로 변경하고,

Capsule Collider컴포넌트 우측에 점3개 버튼을 눌러서 Remove Component를 클릭하여 제거한다.

사실, 반드시 제거할 필요는 없고 개인적인 성향이나 상황에 따라서 콜라이더를 유지해도 된다.

지금 콜라이더컴포넌트를 삭제하는 이유는 하위에서는 오로지 외형(메쉬 = 이미지)만 담당하게 할 것이고

가장 상위에 위치한 부모에서 콜라이더를 통제하도록 하기 위함이다. 관리를 편리하게 하기 위해서.

따라서 만약 지금 콜라이더 컴포넌트를 지웠다면 반드시 부모 오브젝트에 콜라이더 컴포넌트를 추가해야한다.

 

 

5. 콜라이더 추가하기

Player 오브젝트를 선택하고 Add Component를 클릭해서 Capsule Collider를 추가해준다.

이렇게 추가할 경우 캡슐의 위치와 콜라이더의 위치가 일치하지 않으므로 추가적인 수정이 필요하다.

 

 

6. 콜라이더 값 변경

캡슐은 1미터길이의 실린더에 반지름이 0.5미터인 구가 양쪽에 달려있는 형태이므로 높이가 2미터가 기본값이다.

따라서 콜라이더의 Center값 중 Y 값을 1로 변경하고, Height 값을 2로 변경해준다.

그러면 오른쪽 사진처럼 캡슐과 콜라이더가 완벽하게 일치하는 것을 확인할 수 있다.

 

 

7. 플레이어에 리지드바디 컴포넌트 추가

플레이어 오브젝트를 선택하고 Add Component를 통해서 Rigidbody를 추가해주자.

이제 플레이어는 리지드바디를 통해서 물리엔진의 영향을 받을 수 있게 되었다.

 

Rigidbody의 속성값들을 살펴보면 중간쯤에 Constraints라는 것이 존재한다.

그 탭을 열어서 Freeze Rotation의 x와 z에 체크표시를 해주자.

플레이어 캐릭터는 Y축 기준 회전만 해야하기 때문에 이렇게 설정해야만 우리가 의도한대만 움직이게 된다.

 

 

8. 물리엔진 체크

플레이어 오브젝트를 공중으로 들어올려서 중력의 영향을 받는지 확인해보자.

플레이어를 선택한 다음 좌표계의 초록색 Y축을 잡아서 위로 올리거나, 인스펙터창에서 포지션의 Y값을 변경해서 공중으로 옮긴 뒤, 플레이 버튼을 눌러보자.

오른쪽 사진처럼 낙하해서 땅에 착지를 정상적으로 했다면,

콜라이더도 제대로 들어있으며 중력이 작용하는 것으로 물리엔진이 제대로 동작하고 있음을 파악할 수 있다.

 

 

9. 스크립트 추가

플레이어 오브젝트를 선택한 상태에서 Add Component를 클릭하고 RigidbodyControl이라고 입력하면,

해당 이름으로 곧장 스크립트를 생성하여 추가할 수 있다.(아니면 본인이 편한 방법으로 스크립트를 생성하여 추가하자)이제 스크립트까지 추가했으니 이제 소스코드만 작성하면 플레이어 캐릭터를 원하는대로 컨트롤 할 수 있게 되었다.

 

글이 길어졌으므로 스크립트 작성에 관한 내용은 다음번 글에서 이어서 적도록 하겠다.

 

반응형

댓글