2014년 3월 9일 일요일
게 임을 하나 만들려고 생각해보면 게임 자체 이외에도 구현해야 할 요소들이 상당히 많다. 뭔가 미션을 달성하도록 해야할 수도 있고, 점수를 친구들에게 자랑할 수 있도록 해야할 수도 있다. 이러한 요소들이 있어야 게임에 대한 욕구를 더 오래 지속시킬 수 있고, 더 많은 사용자들을 끌어들일 수 있을 것이다.
그렇다면 이러한 요소들은 어떻게 구현해야 할까?
직접 구현하려면 API서버와 DB시스템을 구축해야 한다. 그리고 구축보다 더 문제가 되는 것은 서비스가 지속될 수 있도록 운영해야 한다는 것이다. 이는 개발자가 개인 프로젝트로 프로덕트를 만들어내는데 있어서 상당한 부담이 된다.
그래서 가능하다면 좋은 분들이(?) 만들어서 제공해주는 것들을 감사한 마음으로 사용하고 잘되면 보답하자는 마인드를 갖는 것이 개발자의 정신 건강에 좋지 않을까 싶다.
그 좋은분 1호가 바로 구글 되시겠다.
그들이 게임 개발자들에게 제공해주는 서비스가 바로 구글 플레이 게임 서비스다.
지금부터 제대로 알아보자.
http://developer.android.com/google/play-services/games.html
구글 플레이 게임 서비스의 주요 기능은?
1) 업적 ( 미션 ) 관련 기능 및 기본적인 UI 제공
2) 리더보드 기능 및 기본적인 UI 제공
3) 점수 등의 게임데이터를 클라우드에 저장
4) 멀티유저 게임 개발 프레임웍 제공
( 친구를 초대하고, 초대에 응하고, 같이 게임하는 등의 기능 제공 )
오.. 위의 기능들을 별다른 제한 없이 사용할 수 있다면 따로 서버 시스템을 구축할 필요가 없겠다. 그러나 아직 방심은 금물!
이제 슬슬 눈으로 확인해 볼 차례다..
STEP 1)
개발환경 구축을 위해 Google Play services SDK 를 받아서 셋업하자.
http://developer.android.com/google/play-services/setup.html
일단은 Android SDK Manager 에서 해당 SDK가 설치되어 있지 않다면 설치해야 한다.
그러고나면,
<android-sdk>/extras/google/google_play_services/libproject 에서
google-play-services_lib 라는 프로젝트를 볼 수가 있는데 얘가 바로 구글 플레이 서비스의 기능들을 품고 있는 library project 다.
이 녀석을 workspace 로 import 해오면 된다.
STEP 2)
그럼 이제 샘플앱을 받아서 실행해보자.
Getting Started
: https://developers.google.com/games/services/android/quickstart
Downloads : https://developers.google.com/games/services/downloads/
주로 설명되는 샘플이 TypeANumber 니까 그걸 다운로드 받아서 테스트 해보자.
이클립스로 개발한다면
eclipse_compat/TypeANumber 와
eclipse_compat/libraries/BaseGameUtils 를
다운로드 받아서 workspace로 import 하면 된다.
BaseGameUtils는 library project이고, google-play-services_lib 를 라이브러리로 참조해야한다.
그리고 TypeANumber 는 BaseGameUtils 를 라이브러리로 참조하면 된다.
그리고나서 얘네들 싹다 빌드해보면 성공!
자 이제 떨리는 마음을 뒤로 하고 실행해보자..된다..
응?? 첫화면이 잠깐 보이나 싶더니 죽는다.
java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
( 이거 보이시는분들.. Getting Started 다 안읽어보셨죠?ㅎㅎ )
지금까지의 예제들과는 다르게 얘는 좀 까다롭다. 뭔가 더 해줘야 된다..
STEP 3)
TypeANumber 프로젝트의 패키지명을 com.google, com.example, com.android 가 아닌 다른 것 ( 구글플레이에 등록 가능한 것 ) 으로 변경해야 한다.
3-1) AndroidManifest.xml 에서 package 명을 변경하고,
3-2) 프로젝트를 클린 후 다시 빌드한 후
3-3) R을 제대로 참조하도록 각 파일들을 수정한다.
STEP 4)
Google Play Developer Console 에 게임정보를 추가한다.
4-1) Developer Console 의 좌측 상단 게임탭을 눌러 게임서비스 화면으로 이동
4-2) 게임서비스설정 버튼을 눌러 레이어를 띄우고, 게임이름(Type-a-Number Challenge) 및 카테고리(두뇌게임 및 퍼즐) 입력후 계속
4-3) 게임세부정보에서는 표시이름(Type-a-Number Challenge)만 채우면 저장 가능
STEP 5)
OAuth 2.0 Client ID 를 생성한다.
5-1) 게임세부정보탭 아래에 연결된앱탭을 눌러 이동하고, "Android" 앱을 연결한다. ( 최대 20번까지란다..아껴쓰자..아 그리고 뭐 동의하라고 뜨면 다 동의해 주자 )
5-2) "1단계: 앱세부정보 입력" 에서 패키지 이름을 입력하고, 멀티플레이어 설정 및 불법복제방지 설정을 한 후 저장한다. ( 게임이 뭔지 모르니까 일단은 멀티플레이어 설정과 불법복제방지 설정은 건드리지 않았다. )
5-3) "2단계: 앱 승인" 에서 "지금 앱 승인" 한다.
5-4) Branding Information 입력하라고 나오는데 필수는 아니므로 일단 skip한다.
5-5) Client ID Settings 에서 Signing certificate fingerprint 를 만들어서 입력한다.
( keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
실행 후 비밀번호는 android 입력 )
-> eclipse에서 window-preferences-Android-Build에 있는거 써도 된다.
5-6) create버튼을 클릭하니까~ 오! app id 가 생성되었다!
( 그런데.. 목적은 client id를 생성하는거였는데 app id 밖에 안보인다.. 일단 넘어가자! )
STEP 6)
업적을 등록한다. ( 각 업적의 ID를 기억하자. )
이름 | 설명 | 그 외에? |
prime | Get a score that's a prime number. |
|
humble | Request a score of 0. |
|
arrogant | Request a score of 9999 in either mode. |
|
leet | Receive a score of 1337. | 초기상태를 숨김으로 변경 |
bored | Play the game 10 times. | 단계별 업적에 10 셋팅 |
really_bored | Play the game 100 times. | 단계별 업적에 100 셋팅 |
STEP 7)
리더보드를 추가한다. ( 각 리더보드의 ID를 기억하자. )
Easy High Scores 와 Hard High Scores 로 하나씩 추가한다. ( 이름 외 나머지 정보는 default 로 )
STEP 8)
테스터 계정을 추가한다.
앱을 출시하기 전에는 테스터 계정으로만 로그인할 수 있다.
STEP 9)
앱 프로젝트를 수정한다. ( STEP2에서 에러났던게 생각난다.. )
9-1) res/values/ids.xml 에서 ReplaceMe 라고 되어 있는 녀석들을 채워 넣는다.
( app id 와 업적 id들, 그리고 리더보드 id들을 name에 대응하는 값들로 넣는다. )
-> 이것들은 업적이나 리더보드쪽에 리소스 받기를 누르면 xml형식으로 제공을 해준다.
다 됐다! 이제 디바이스에서 테스트앱을 실행해보자!
최초 실행시 로그인을 시도하고 성공하면 아래 화면을 확인할 수 있다.
->게임을 출시하지 않아도 테스트 가능하다.
후아.. 참 오래도 걸렸다..
이제 즐겁게 테스트나 해볼까?
무슨 게임인가하고 Easy를 눌러봤더니 그냥 숫자 입력하는 게임(?)이다.
Show Achievements 를 보니 달성해야 하는 업적들이 보인다.
각 업적의 내용대로 숫자를 입력하니 업적 달성했다는 메시지가 출력된다.
Show Leaderboards 를 보니 Easy 나 Hard 에서 플레이한 내점수 및 순위를 볼 수 있다. 그리고 랭킹은 내 서클 내의 랭킹과 공개(전체) 랭킹이 있다.
그리고 Google+ 공유 및 사용자 찾기 기능이 있다.
좋다~! 게임 만들기 좋은 세상이구나~!!