Prosto

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

Programing/Unity 3D

따라하는 유니티 2D 프로젝트ⓑ -9

Prosto 2016. 11. 2. 00:14

 

따라하는 유니티 2D 프로젝트ⓑ 강좌 아홉 번째(마지막) 시간입니다.

 

 

이번에 함께 할 작업은 지금까지 만들었던 게임을 안드로이드 어플(apk 파일)로

전환하는데 어떤 추가 작업이 필요한지 확인하고,

 

추가 작업을 해 안드로이드 기기(태블릿, 스마트폰 등)에서

동작이 잘 되는지 실행시켜 확인해보겠습니다.


 

 


그럼 시작하겠습니다.


가장 먼저 저번에 작업했던 프로젝트를 실행합니다.

그리고 순서대로 직접 따라하시면 됩니다.

 

 

먼저 이제부터 빌드할

안드로이드(Android)로 플랫폼을 전환하고

씬(Scene)도 등록해주고, 플레이어 셋팅(Player Setting)도 해주도록 합시다.

 

좌측 상단의 메뉴 중 File - Build Settings...를 선택해주세요.

 

이렇게 Build Settings 창이 뜨는 것을 확인할 수 있을 겁니다.

 

먼저

상단에 위치한

Scenes In Build에

우리가 생성한 씬을 등록하기 위해

'Add Open Scenes' 버튼을 눌러주도록 합시다.

 

(누르면 이렇게 현재 열린 씬이 추가된 것을 확인할 수 있습니다.)

 

 

그리고 다음으로 빌드할 플랫폼을 변경하겠습니다.

(유니티 로고가 지금은 PC, Mac & Linux Standalone에 위치하고 있는 게 보이실 겁니다.)

Platform 목록들 중

Android를 선택하여

'Switch Platform' 버튼을 눌러주시면 됩니다.

 

(유니티 로고가 지금은 Android 옆으로 이동했죠?)

다음으로 플레이어 셋팅을 하겠습니다. 빌드할 때 적용할 셋팅이라고 보시면 됩니다.

'Player Settings...' 버튼을 클릭해주세요.

 

그럼 우측의 Inspector 탭이 위치했던 곳에 Player Settings 탭으로 전환된 것을 확인할 수 있습니다.

 

그러면 일단 지금 켜져있던 Build Setting 창은 닫아주도록 합니다.

 

Player Settings를 하기 전에 먼저 적정 해상도를 잡아주도록 합시다.

게임에 따라 해상도는 차이가 나겠지만,

캐주얼한 게임의 경우는 720x1280이나 1280x720 정도로 충분합니다.

(기준 해상도를 잡고 작업해줘야 합니다..

스마트 폰의 경우 해상도가 다양하기 때문에 가장 적절한 (비율)기준 해상도를 잡아주시면 됩니다.)

 

Label에 구분 지어줄 이름, Width & Height에 가로 세로 해상도를 입력해주면 됩니다.

(세로로 보는 게임이면 Width가 짧을 테고, 가로로 보는 게임이면 Height가 더 짧겠죠?)

 

(이렇게 해상도 설정을 하면 Game 탭에서 해상도가 적용된 화면을 볼 수 있습니다.)

(원래 가로까지 전체가 보였는데 지금은 세로에만 화면이있죠?)

 

 

그럼 PlayerSettings를 이어서 설정해보겠습니다.

 

켜면 나오는 부분에서는 두 가지만 수정해주면 됩니다.

Company Name 회사 이름을 적당히 적어주시고,

Product Name 게임이름도 적당히 적어주세요.

 

그리고 하단에 있는 Settings for Android에서

Default Orientation을 Portrait으로 설정해주세요.

(가로 모드, 세로 모드 같은 겁니다.)

 

(이름은 이런식으로 변경해주시고요.)

 

 

그리고 Other Settings를 클릭하면

위의 이미지처럼 항목이 쭉 나옵니다.

 

여기서 Identification의 Bundle Identifier 부분과

Configuration의 Scripting Backend 부분만 수정하겠습니다.

(추가로 Device Filter나 인터넷 등등 필요한 경우 알아보시고 수정해주시면 됩니다.)

 

 

Bundle Identifier에 아까 적어둔 대로 com.회사이름.게임이름

으로 작성해주시면 됩니다.

 

Scripting Backend의 경우 Mono2x도 관계 없지만

IL2CPP로 바꿔주면 좋습니다.(다만 빌드하는 시간이 훨씬 오래 걸린다는 점이..)

 

IL2CPP는 작성된 프로그램의 소스 IL을 c++로 전환시켜 속도(성능) 향상을 가지고 올 수 있다고 합니다.

그리고 소스 코드 보안에도 도움이 됩니다.

(사실 전 IL2CPP를 사용하는 이유가

mono2x는 별도 보안 처리를 안 해주면 아주 간단하게 소스를 들여다볼 수 있다(디컴파일)는 단점 때문이었습니다.)

 

(하지만 net, json 등을 사용하는 경우 버그 증가의.... )

 

[지나가며 들었던 내용들이라 정확한 개념을 알고싶으시면 따로 더 알아보시는 게 좋을 것 같네요.]

 

자, 이제 가장 기본적으로 설정해줘야 하는 건 모두 설정해줬습니다.

(이따가 설치해줘야하는 게 있겠지만....)

 

 

다음으로 우리 게임에 따로 적용해줘야하는 부분들을 살펴보고

하나씩 바꿔줘볼까요?

 

먼저 Hierarchy 탭에서

NormalBlockCenterTop으로 생성해뒀던

게임오브젝트를 선택해보세요.

 

해상도를 바꾸고 보니 너무 크죠?

사이즈를 줄여 게임 화면에서 적당한 크기로 등장하도록 바꾸겠습니다.

(바꾸기 전에 게임 실행해보면 얼마나 크게 나오는지 확인할 수 있을 겁니다..)

이렇게

Scale을 x 0.5, y 0.5로 바꿔주세요.

그리고 Position도 꼭대기 맞게 옮겨주시고요.

(지금 해상도 기준으로는 y를 15.3로 바꿔주면 됩니다.)

 

 

당연히 NormalBlock도 스케일을 0.5 0.5로 바꿔줘야겠죠?

(원래 NormalBlockCenterTop도 이걸 가지고 썼던거죠? 기준치로 두려고요.)

 

 

다음으로 NormalBall도 수정해주도록 하겠습니다.

하지만 NormalBall의 경우는 씬(Scene)에서 보고 수정할 부분이 있으니

NormalBall 프리팹을 Hierarchy 탭으로 드래그 앤 드랍하여

게임오브젝트를 만들어주세요.

 

 

스케일은 블록과 마찬가지로 x 0.5, y 0.5로 설정해주세요.

 

다음으로 할 작업이

바로 MoveBall이 가지고 있는 이동 가능한 위치를 설정해줘야겠죠?

예전처럼 MinPos와 MaxPos를 다시 설정해봅시다.

이렇게 좌측 하단에 딱 맞게 위치시키면

그게 MinPos에 들어가야겠죠?

 

지금 이 위치는

이렇게 되네요.

 

그 Position 값을 기준으로

MinPos에 그대로 입력해줍시다.

 

 

그럼 MaxPos 위치도 찾아봐야겠죠?

이 정도면 적당한 것 같네요.

Inspector 탭을 확인해볼까요?

 

아까와 마찬가지로 Position을 MaxPos에 그대로 옮겨적어줍니다.

 

그럼 MinPos, MaxPos 모두 제대로 값을 갖게 됐네요.

(화면을 벗어날 일은 없겠죠?)

 

이제 바꾼 게임오브젝트(NormalBall)를 다시 프리팹으로 등록해줘야합니다.

프리팹을 Hierarchy 탭으로 가지고 와서 수정한 경우

다시 드래그 앤 드랍하여 원래 위치에 넣어주면 됩니다.

 

그러면 수정된 내용이 프리팹에 적용됩니다.

 

 

수정된 내용을 적용시켰으면

이제 필요없으니

Hierarchy 탭에서는 삭제(Delete) 해주세요.

 

 

마지막으로 EmptyNormalBall이 남았네요.

이건 Ball과 마찬가지의 크기여야겠죠?

Scale을 x 0.5, y 0.5로 바꿔줍니다.

 

그리고 게임 실행을 해보면

이렇게 해상도는 바뀌었지만 잘 동작하는 것을 확인할 수 있습니다.

 

근데 볼 속도가 좀 빠르네요.

조금 낮춰줄까요?

 

MoveBall 스크립트를 열어

private float moveSpeed = 0.3f;

이 부분이 볼의 움직임 속도를 나타내는 값이었죠?

 

private float moveSpeed = 0.2f;

이렇게 바꿔 속도를 늦춰줍시다.

 

 

정상 작동되는 것을 확인할 수 있습니다.

(아, 저는 안드로이드로 플랫폼 전환하다가 보니 UI가 날라갔더라고요..

그래서 다시 그대로 만들었습니다. 색상만 조금 달라졌을 것 같네요.

(시간 부분도 잘 안 보이기에 붉은기가 돌게 바꿨습니다.. ) )

 

 

그럼 이제 스크립트 상에서

바꿀 부분이 하나 남았습니다.

 

바로 클릭이었던 것을 터치로 전환해줘야겠죠?

이 부분이

우리가 클릭했을 때 그에 맞게 처리가 되도록 만들어준 부분이었습니다.

 

터치로 전환하려면 어떻게 해야할까요?

 

이렇게 touch 관련된 함수들을 가져다 쓰면 됩니다.

 

Input.touchCount는 현재 화면에 터치된 숫자를 나타내줍니다.

0보다 크다니까 터치가 있으면 아래 내용을 처리하라는 거죠?

 

Touch tempTouch;를 통해서 터치 입력이 있는 경우

해당 터치를 잠깐 받고,

phase로 현재 터치가 어떤 상태에 있는지 확인합니다.

 

그 상태가 TouchPhase.Began 시작, TouchPhase.Ended 종료

어떤 상태인지에 따라 맞게 처리를 해줘야겠죠?

(마우스 클릭 시작, 종료와 같죠?)

 

Touch에 관한 내용을

조금 더 자세히 확인하고 싶으시다면

'유니티에서 터치 처리하기'

'유니티 클릭(터치)처리에서 UI 제외하기'

글을 참고해주세요.

 

 

이렇게 터치 내용 안을 채워주세요.

(마우스 클릭 온, 오프와 같은 내용이죠?)

 

다른 부분이 하나 있다면

동그라미 친 부분입니다.(tempTouch.position)

 

이제 실상 바꿀 부분은 모두 바꿨습니다.

 

 

그런데 추가로 하나만 바꿔주세요.

(게임 중 화면이 꺼지지 않도록 설정하는 것과 해상도 고정입니다.)

 

이와 관련된 내용은

'유니티 해상도 설정(SetResolution & UI)'

글에서 확인할 수 있습니다.

 

(SetResolution을 적용한 경우와 하지 않은 경우의 차이와 함께 UI도 해상도에 따라 적절하게 변경하기까지)

 

 

 

이제 마지막으로

빌드할 일만 남았습니다

 

하지만! SDK, JDK, NDK가 설치되어있지 않다면

한 단계 더 거쳐가야겠습니다.

 

좌측 상단 메뉴 중 Edit - Preferences...를 선택하여

설치되어 있는지 확인해보도록 합시다.

 

'External Tools'를 눌러

Android 밑의 SDK JDK NDK가 설정되어 있는지 확인해봅니다.

 

만약 위와 같이 없다면 설치하는 과정을 거쳐야합니다.

 

설치가 복잡하진 않습니다.

'유니티 안드로이드(APK) 만들기 (SDK, JDK, NDK)'

글을 참고하여 설치해주세요.

 

 

 

이렇게 Android 밑의 SDK, JDK, NDK가 모두 설정되었다면

이제 마지막 빌드 과정을 해봅시다.

 

 

아까와 같이 좌측 상단 메뉴 File - Build Settings로 들어갑니다.

여기서 Build 버튼을 눌러줍니다.

 

 

그러면 이렇게 빌드하여 apk 파일을 생성할 위치를 지정한 후

적어둔 이름으로 만들 수 있습니다.

 

적당히 이름을 적은 후 저장(S) 버튼을 눌러주세요.

 

 

그러면 빌드가 진행될 것입니다.

기다리고 기다리면

이렇게 apk파일이 생성된 것을 확인할 수 있습니다.

 

이 파일을 안드로이드 폰(태블릿)에 넣은 후

설치하여 실행해보면

 

실제로 게임이 작동되는 것을 확인할 수 있습니다.

 

한번 간단하게 같이 진행해볼까요?

(SD카드에 넣었다고 가정하고 보겠습니다.)

(뷰어나 탐색기(아스트로 등)으로 apk 파일을 넣어둔 경로로 이동하신 후 선택합니다.)

 

그러면 이렇게 나옵니다.

설치 버튼을 눌러주면 알아서 설치가 완료됩니다.

 

(혹은 알 수 없는 파일을 설치할 것인지 물어봅니다.

그러면 설치하겠다는 설정을 마치고 설치를 합니다.)

 

 

(아래의 사진은 태블릿에서 실행해본 모습입니다.[+사진이 너무 커서 해상도 낮췄습니다.])

   

(UI, 게임 화면 모두 정상적으로 나오죠?)

 

태블릿을 찍은 모습입니다. 잘 나오죠?

 

 

지금까지 따라하는 유니티 2D 프로젝트ⓑ -9번(마지막) 강좌를 보셨습니다.

이번 시간에는 지금까지 만든 게임을 apk 파일(안드로이드)로 만드는데

필요한 설정, 혹은 게임 내부 변경을 해봤고,

실제로 태블릿(혹은 스마트폰)에서 실행까지 해봤습니다.

이번 강좌를 통해 이제 자신이 만든 게임도 apk 파일로 만들 수 있겠죠?

 


이번 시간을 끝으로 당분간 정규 강좌는 멈추겠습니다.

이것저것 한꺼번에 하려니 강좌 질도 떨어지려하고 텀도 길어지고..

어느정도 일들을 마무리한 후 다시 강좌를 작성하겠습니다.

다음 강좌는 아마 한 달에서 두 달 정도 후부터 올릴 수 있을 것 같습니다.

이번 프로젝트ⓑ 같은 경우는 프로그래밍을 많이 접한 분들은 그래도 공부도하며 할만 하겠지만

스크립트(소스)가 많이 사용되어 어려울 수도 있을 것 같습니다.

프로젝트ⓐ와 마찬가지로 프로젝트ⓑ를 기본으로 추가 작업하여 완성형을 만들어 다시 글을 올리도록 하겠습니다.

 

끝으로 다음 강좌 ⓒ, ⓓ는 아주 쉽고 초보자도 만들기 쉬운 게임으로 강좌ⓒ를,

그리고 어느정도 만드는데 난이도가 있는 강좌ⓓ를 구상하여 진행해보도록 하겠습니다.

 


이번 프로젝트ⓑ도 끝났네요. 지금까지 고생하셨습니다. 어떻게 도움은 좀 됐는지 모르겠네요.

 

궁금한 점 있으시면 댓글이나 따로 메일로 질문하시면 시간되는 대로 답변드리겠습니다. ( 연락 )

 

Comments