Prosto

따라하는 유니티 2D 프로젝트ⓐ -1 본문

Programing/Unity 3D

따라하는 유니티 2D 프로젝트ⓐ -1

Prosto 2016. 9. 13. 03:53

 

 

 

Unity 2D 프로젝트ⓐ로 결정지은 게임은

볼(원)이 장애물을 피해가는 게임입니다. (런닝 게임 부류에 속한다고 봐도 무방합니다.)

 

단순한 게임이지만 특별한 시스템을 몇 가지 넣어

단순하지만은 않게 만들 예정이고,

 

가장 큰 기본 틀을 만든 후 -> 자세한 부분으로 진행할 예정입니다.

 

아주 기본적인 카메라 이동, 캐릭터 컨트롤(조작), 프리팹 생성 등 필요한 부분은 전반적으로 다룰 예정입니다.

 

완성본을 올리는 것이 아니라 차근차근 진행할 것이므로 따라하며 이해하기 수월할 것입니다.

아, 가능하면 원래 기획을 따라가겠지만, 진행 중간 중간 프로젝트 세부 내용이 바뀔 수는 있습니다.

(중간에 이미 만들어둔 소스를 수정하는 부분이 있을 수도 있다는 말....)

 

몇 가지 우선 설명해드리자면 소스 코드는 제공하지만, 스크린샷 형식으로 제공합니다.

(타이핑은 직접해보시길 바랍니다.) 주석은 어느정도 달려있을 것입니다.

소스의 대부분은 가급적이면 코루틴을 이용할 것입니다.(코루틴에 대하여)

...기능 구현에 대하여 확인해보고 이런저런 추가 기능도 만들어보길 권합니다.

 

 

 

 

시작하기에 앞서 먼저 '따라하는 유니티 2D 프로젝트ⓐ-0' 글을 보고 프로젝트를 생성하셨기를 바랍니다.

 

그럼 프로젝트ⓐ 시작하겠습니다.

 

에셋에 마우스 오른쪽 버튼을 클릭한 후 Create -> Folder 순으로 선택하여

폴더를 생성해주세요.

 

폴더는 용도에 맞게 생성하면 됩니다.

저는 현재 Images, Resources, Scenes, Scripts 네 가지 폴더를 만들어뒀습니다.

윈도우에서 사용하듯 생성과 제거가 가능합니다.

 

게임에서 쓸 공 모양을 만듭니다.

포토샵을 이용하여 만들었습니다.

이때 배경색은 투명으로 해야합니다.

 

저장 형식은 png로 해주세요.

투명색 정보도 가지고 있는 파일 형식이여야 합니다.

(첨부해드립니다. 공부에 사용하시는 건 자유롭게 사용 가능합니다.

별도로 만들어서 사용하여도 좋습니다.)

다운로드

 

 

Assets -> Images를 클릭한 후 유니티에서 사용할 이미지(파일 등)를

드래그 앤 드롭하시면 됩니다.

 

그러면 이렇게 이미지가 추가됩니다.

Generate Mip Maps은 사용하지 않으니 체크 해제해주세요.

Generate Mip Maps는 거리에 따라 흐리게, 선명하게 이미지를 표시해주는 기능입니다.

 

Generate Mip Maps 해제 후, Sprite Editor를 엽니다.

여기서 이미지를 클릭하면 하단에 Sprite 정보가 나오는데

Pivot 부분을 수정할 것입니다.

Custom으로 바꾸고 x축은 중앙 0.5, y축은 이미지의 바닥에 맞춰줍니다.

비어있는 오브젝트를 생성합니다.

Hierarchy 탭에서 우측클릭 -> Create Empty

 

생성된 GameObject를 클릭하면 우측에 Inspector창이 활성화됩니다.

여기에서 Add Component를 클릭하여 sprite를 입력한 후

Search 결과에 있는 Sprite Renderer를 선택해줍니다.

 

선택하면 Sprite Renderer가 추가됩니다.

여기서 우리는 Sprite 옆의 동그란 부분(O)를 클릭하여

우리가 가지고 있던 이미지를 클릭합니다.

(Images의 공 이미지를 -> 해당 게임 오브젝트의 랜더러-스프라이트 영역에 드래그 앤 드롭해도 됩니다.)

 

화면에 표시가 너무 크게 되니 카메라 사이즈를 조절하도록 합니다.

사이즈에 따라 화면에 나타나는 정도가 차이납니다. (확인해보세요.)

 

Scripts에 Player 폴더를 추가한 후 C#스크립트를 생성해줍니다.

폴더를 생성하는 방법과 동일합니다.

 

이렇게 생성하면 나오는 스크립트를 더블클릭하면

코딩할 수 있는 영역이 나타납니다.

여기에 우리는 player가 일정한 속도로 우측으로 이동하는 스크립트를 작성하였습니다.

스크립트 내에서 호출되는 순서

Awake(){최초}

OnEnable(){2nd}

Start(){3rd}

까지는 한 번 호출되고 끝

update, fixedUpdate(4th)는 프레임 간격 반복 확인함.

추가적으로 fixedUpdate는 정해진 프레임 만큼만 update하며 시간에 대한 값 유지함.

기기 동작 속도간의 관계 없이 일정하게 사용 가능함. (업데이트는 성능에 따라 차이남)

 

 

제대로 이동을 확인하기 위하여 간단한 바닥도 만들어줍니다.

이미지는 언제든 교체 가능하니 일단 빠르게 만들어 줍니다.

(첨부해드립니다. 공부에 사용하시는 건 자유롭게 사용 가능합니다.

별도로 만들어서 사용하여도 좋습니다.

1024였는데 크기가 조정됐네요.. 따로 zip으로 두 가지 첨부하겠습니다.)

 

 

타일도 볼을 넣을 때와 마찬가지로 드래그 앤 드랍해줍니다.

 

1.이번에 생성은 이미지를 곧장 Hierarchy에 드래그 앤 드랍했습니다.

그러면 EmptyObject + SpriteRender에 이미지가 들어가있는 형식으로 만들어집니다.

 

2. 일단 바닥에 줄줄이 깔아줄 수 있도록 적당한 크기로 바꾸고

3. 복사 붙여넣기해서 줄줄이 놓아줍니다.(좌측 상단의 Scene 영역에서 움직이면 편합니다.)

 

MainCamera를 선택해 Position은 바꿔줍니다.(공과 적당한 거리로)

그리고 MainCamera를 GameObject에 드래그 앤 드랍하여 GameObject의 하위에 위치시켜줍니다.

(현재는 테스트를 위하여 카메라는 간단하게 붙여놓기만 합니다.)

 

그리고 아까 작성해뒀던 PlayerMove를 GameObject에 드래그 앤 드랍하여 추가해줍니다.

 

 

이제 상단의 실행 버튼을 눌러보면 공이 우측으로 계속 움직이고 있는 것을 확인할 수 있습니다.

 

우측에 PlayerMove 하위에 있는 Speed를 바꿔보면

움직이고 있는 공의 속도도 바뀌는 것을 확인할 수 있습니다.

 

여기서 문제점이 공이 계속 우측으로 움직이면

공의 x 좌표가 끝없이 증가됩니다.

이러면 나중에는 오차가 생기게 되고 의도와 다른 결과가 나올 수 있습니다.(버그가..)

그렇다면 이 문제를 해결하려면 어떻게 해야할까요?

 

그 방법들 중 대표적인 두 가지가

1. position이 일정범위 이상 넘어가면 다시 0 원점으로 불러들인다.

이 방법으로도 해결 가능합니다. 다만 그 좌표가 바뀌는 순간에 보이던 것들도 고스란히 가지고 와야겠죠?

 

2. 플레이어 캐릭터는 그 자리에 그대로 있고, 배경과 장애물이 움직이는 방법입니다.

이 방법은 플레이어는 화면 그대로 정지해있지만,

배경이 움직여 마치 캐릭터가 앞으로 나아가고 있는 듯 보이게 하는 방법입니다.

배경과 장애물이 따로 관리되어야 하지만 여러모로 좋은 방법입니다.

 

우리가 이 프로젝트를 진행하며 사용할 것은 2번 방법입니다.

 

 

 

지금까지 따라하는 유니티 2D 프로젝트ⓐ -1을 통하여 간단하게

프로젝트 생성부터 유니티 프로젝트 내의 폴더, 스크립트 생성 작성,

 이미지 추가, 실제 캐릭터의 움직임까지 봤습니다.

 

 

지금까지 아주 기본적인 유니티 사용방법으로 나왔던 부분(폴더 생성, 이미지 추가 방법, 실행 방법, 스크립트 추가 방법 등...)은

잘 숙지하고 계시길 바라겠습니다.

다음 프로젝트부터는 중복되는 부분에 대하여는 간단한 텍스트로만 설명하며 진행합니다.

 

 

 

유니티 2D 프로젝트ⓐ -2에서는..

 현재 문제점으로 보였던 캐릭터가 x축으로만 계속 끝없이 달리는 점을 보완하기 위하여

배경과 장애물이 움직이게 만드는 방법으로 바꾸어 구현하도록 하겠습니다.

 

 

 

 

(파일 첨부해드립니다. 공부에 사용하시는 건 자유롭게 사용 가능합니다. 별도로 만들어서 사용하여도 좋습니다.)

imgProjectA1.zip

 

 

 

궁금한 점 있으시면 댓글이나 따로 연락주시면 가능한 범위 내에선 답변드리겠습니다.

Comments