[Unity] 프로젝트 생성 및 캐릭터 조작 (+애니메이션) (1)

이준석·2021년 1월 17일
1

Unity

목록 보기
2/4
post-thumbnail

생각보다 Unity 다운로드 시간이 오래걸렸다.

다운로드가 끝난 뒤에 프로젝트를 생성하고 유튜버님이 제공해주시는 리소스를 블로그에서 다운받아서 유니티에 미리 임포트 시켜두었다.

해당 리소스는 다음 블로그에서 받을 수 있고, 강좌 유튜브 설명란에도 링크를 걸어두셨다.

https://blog.naver.com/gold_metal/221609252536

나도 처음에 Unity로 게임을 작업할 때 png파일을 하나하나 다운받아서 폴더에 정리하고, 그 수많은 png파일중에 하나를 찾아서 스프라이트에 입히고 그러는 작업을 했는데, 먼가 번거로움을 느꼈고 실제로도 이렇게 하나? 라는 의문점이 남았다.

그런데 수업을 쭉 듣다보면 아틀라스라는 것을 이용해서 편하게 png파일을 관리할 수 있는 방법을 알려주시는데 굉장히 혁신적이었다. 나는 이미 그 수업을 듣고 글을 쓰고 있는 부분이기 때문에 아틀라스를 이용해서 스프라이트를 만들었기 때문에 혼동이 없기를 바란다.

1. 프로젝트 준비

따라서 리소스를 전부 다운로드 받고 준비를 완료했으면 Unity에 접속해서 2D로 프로젝트를 하나 개설한 후 프로젝트 준비를 한다. 그리고 이전에 다운받은 리소스들을 유니티 에셋에 임포트 시켜준다. (드래그 앤 드롭으로 가능!)

드래그 앤 드롭으로 에셋을 추가할 수 있다 (스크린 샷은 현재 아틀라스 이용 중이라 다를 수 있다.).

따라서 이와 같이 임포트 시켜두면 우선 작업을 편리하게 할 수 있다.

2. 스프라이트 만들기

그리고나서 이제 플레이어와 지형을 간단하게 작업해보도록 하자. Hirarchy창에서 빈 공간에 오른쪽 클릭을 한 후

🟡 2D Object > Sprite 를 클릭한다. (스프라이트는 2D에서의 그래픽 오브젝트를 말한다.)

그러면 New Sprite라고 Hirarchy창에 새롭게 뜨게 되고 해당 이름을 Player로 변경해준다. 그리고는 임포트한 캐릭터 이미지 하나를 선택해서

🟡 Inspector창에서 > Sprite Render > Sprite 에 드래그해서 넣어준다.

생성한 Sprite에 임포트한 에셋 입히기

따라서 임포트하면 화면에 Scene에 해당 캐릭터가 나타나게 된다. 이렇게만 하면 반 쪽 짜리 캐릭터에 불과하다.

캐릭터를 생성하면 자동으로 몇 가지를 기계처럼 해줘야하는 작업이 있는데 다음과 같다.

1. 박스 콜라이더 설정 (Box Collider 2D)

2. 리지드바디 설정 (RigidBody 2D)

(2D로 하는 이유는 현재 사용하는 그래픽이 2D 이기 때문이다.)

Inspector 하단에 보면 Add Component 라는 버튼이 있다. 버튼을 눌러 두 개의 컴포넌트를 추가해준다.

박스 콜라이더와 리지드바디를 설정해준다.

여기서 박스 콜라이더를 설정해주는 이유는 충돌을 감지하는 센서와 같은 역할을 해주기 위해서이다. 만약에 박스 콜라이더를 설정해주지 않으면 다음과 같은 버그(?)가 발생한다.

캐릭터에는 박스 콜라이더를 해두었고, 지형에는 박스 콜라이더를 설정하지 않았다.

따라서 지형에는 박스 콜라이더가 없어 충돌 판정이 없기 때문에 캐릭터가 밑으로 빠지게 된다. 그리고 캐릭터가 중력의 힘을 받으면서 아래로 떨어지게 된 이유는 바로 리지드바디를 설정해주었기 때문이다.

리지드바디는 게임 오브젝트를 물리 제어를 할 수 있도록 하기 위해서 설정해주게 된다. 따라서 나중에 캐릭터를 방향키 입력을 통해 움직이게 할 때 물리의 힘으로 움직이게 하는데 그 때 사용된다.

따라서 최종적으로 간단하게 맵을 만들고 위에서 설정한 컴포넌트들을 추가하면 다음과 같이 작동한다.

  • 현재 상태에 지형지물에 리지드바디를 추가하면 지형지물도 물리 제어가 돼서 밑으로 한없이 추락하지 박스 콜라이더만 사용한다.

  • 캐릭터는 박스 콜라이더가 아닌 캡슐 콜라이더로 변경한다. 캡슐 콜라이더로 바꾸는 이유는 박스로 충돌 판정을 하다보니 지형지물의 박스 콜라이더에 미세하게 걸려 캐릭터가 움직이지 않는 경우가 존재한다. 따라서 둥근 캡슐로 콜라이더를 하면 그런 문제점을 제거할 수 있다.)

위와 같이 작업하고 실행하면 다음과 같이 캐릭터가 지형에 안착한다.

유튜브를 잘 보고 따라왔다면 여기까지는 완성이다. 그 다음으로 캐릭터를 이동하기 전에 애니메이션에 대해서 알아볼 예정이다.

3. 스프라이트 애니메이션 만들기

내가 처음에 유니티를 배우면서 만들었던 애니메이션은 엄청난 노가다가 들어갔었다. 왜냐하면 시간마다 내가 직접 에셋을 끌어다가 설정해주고 그런식으로 작업했었다. 하지만 그 때 내가 정보가 부족했었는지 유튜버님이 설명해주는 애니메이션 제작 방식은 굉장히 간단했다.

물론 좀 더 정교한 애니메이션을 원하는 사람들은 노가다성 작업이 필요하지만 간단한 애니메이션 작업만 필요한 경우에는 해당 방식이 너무나도 나에게는 혁명과도 같은 수준이었다. 방식은 다음과 같다.

내가 임포트한 에셋을 보면 Idle, Walk, Jump와 같이 이름이 붙은 파일명들을 볼 수 있는데 우선 Idle 작업을 하면서 설명유튜버님께서 만들어주신 Idle 에셋은 2개이다. 따라서 해당 에셋들을 복수 선택한 후 Hirarchy의 Player에 드래그 앤 드롭을 하면 파일 저장 화면이 뜬다. 거기서 폴더를 만들고 저장하면 애니메이션 생성 완료이다.

애니메이션 제작을 원하는 에셋을 복수 선택한 후 적용을 원하는 스프라이트에 넣어준다.

그리고 실행시켜보면 정상적으로 Idle 애니메이션이 작동하는 것을 볼 수 있다.

Idle 애니메이션이 실행되고 있는 캐릭터

이와 같은 방식으로 Walk, Jump를 만들 수 있다.

이제는 캐릭터를 이동시키는 방법을 알아보자.

4. 캐릭터 이동

드디어 본격적인 코딩이 들어간다. 유니티에서 제공하는 스크립트 언어는 C#이다.

나의 경우 자바를 대학교 내내 배우고 있는 가운데 C#이 자바와 거의 똑같은 문법을 구사하고 있어서 익숙해지는데 별로 어려움은 없었다.

따라서 스크립트 파일 하나 생성을 위해 Scripts 폴더를 만들고 그 곳에 C# Script를 생성해준다. (파일명은 알아서)

그리고 스크립트 파일을 더블 클릭하면 Visual Studio로 연결되는데 첫 셋팅은 Start와 Update 메서드가 생성되어 있을 것이다.

이 부분을 다음과 같이 수정해준다.

🟡 Start > Awake

🟡 Update > FixedUpdate

위의 차이점은 구글링을 해보면 간단하게 찾을 수 있다. 여기서 핵심은 Update와 FixedUpdate인데 물리적인 작업을 해야 하는 경우에는 FixedUpdate에 해주어야 한다. 따라서 캐릭터를 움직이려면 물리적인 작업을 해주어야 하기 때문에 FixedUpdate에서 이동을 구현해주어야 한다.

그리고는 다음과 같이 코딩해준다.

캐릭터 이동에 대한 코딩

자세한 설명은 유튜브에도 있으니 참고하길 바란다. 유튜브에서 설명해주지 않았던 ForceMode2D.Impulse에 대해서 찾아보았는데, 유니티 도큐먼트에 나온 글은 다음과 같다.

Add an instant force impulse to the rigidbody2D, using its mass.

질량을 사용하여 리지드바디 2D에 즉각적인 힘 자극을 가한다.

즉, AddForce로 주어진 힘을 리지드바디가 적용된 캐릭터에 힘을 가해준다는 설명인데 간단하게 이해되었다.

이와 같이 코딩하고 작동해보면 다음과 같다.

(여기서 중요한 작업이 빠졌는데, 생성한 스크립트를 Player에 드래그 앤 드롭해서 스프라이트에 적용해주어야 한다!!)

방향키를 꾹 누르면 캐릭터가 무한으로 힘을 받아서 날라가 버린다.

지금 실행시켜서 방향키를 꾹 누르면 캐릭터가 날라가 버린다. 그리고 약간씩 기우뚱 하는 모습을 보이는데 이번 포스팅에서는 이 부분까지 마무리하고 다음 포스팅에서 다뤄야 할 것 같다.

따라서 다음과 같은 버그를 해결하기 위해서 다음과 같이 생각해 볼 수 있다.

1. 방향키를 꾹 누르면 현재 무한으로 힘을 받는다.

2. 그럼 어느 정도까지 힘을 받으면 힘을 고정시키면 되지 않을까?

그래서 우리는 maxSpeed라는 변수를 만들고 작업을 해보면 다음과 같이 코딩할 수 있다.

속도 제한하는 코딩은 다음과 같다.

유튜브를 보면 자세한 설명이 나온다. 여기서 왼쪽으로 이동할 때 maxSpeed에 -1을 곱하는 이유는

오른쪽 진행방향이 +이고, 왼쪽 진행방향이 -이기 때문이다. 따라서 방향성에 대한 부분이다.

그리고 캐릭터가 기우뚱 기우뚱 하는 것을 막기 위해서 다음 설정을 찾아본다.

🟡 Hirarchy창에서 Player선택 > Inspector에서 Rigidbody2D 찾기 > Constraints 에서 Freeze Rotation Z 체크

Freeze Rotation Z 체크하는 부분

따라서 모든 설정을 다 마치고 실행하면 캐릭터가 이제야 자연스럽게 작동하는 것을 볼 수 있다.

캐릭터가 잘 움직이는 것을 볼 수 있다.

이렇게 해서 오늘은 프로젝트 생성부터 간단한 Idle 애니메이션과 캐릭터 움직임에 대해서 공부해보았는데, 다음 포스팅에서는 걷는 애니메이션과 타일맵을 이용해서 간단하게 맵 만드는 방식과 캐릭터 점프에 대해서 알아보도록 할 예정이다.

상세하게 적지는 못했기 때문에 자세한 부분은 유튜브 강좌를 통해서 학습하길 권장드립니다.

저는 지금 스프라이트 모드에서 Pixel Per Units 설정, Gravity Scale, Linear Drag 등이 설정되어 있는데 이 부분은 유튜브를 보시면 설정하실 수 있다.

또한 픽셀아트의 경우 처음 임포트하면 간단한 설정을 통해서 보다 또렷한 이미지로 작업할 수 있는 부분도 나와있다.

그러한 부분은 부수적인 부분인 것 같아서 포스팅에서 빼게 되었다.

하루에 글 하나 올리기 프로젝트도 잘 되어가고 있는 것 같아서 다행이고, 언리얼 엔진을 잠시 버리고 온 만큼 빠르게 유니티로 2D 게임 작업 하는 방식을 배우면서 이번에 방학 동안에는 결과물을 만들어 포트폴리오를 준비를 해야겠다는 다짐을 한다.

그리고 OPIc...❗❗ 그것도 해야 한다...😱😱

큰일났지만 일단 포스팅은 여기서 마치도록 하고 다음 포스팅에서 보도록 합시다.

바바~🖐🖐

profile
호주 워홀중

0개의 댓글