처음 안드로이드에서 게임을 개발해보고자 마음 먹었던 것은 2011년도 10월쯤이었던 것 같다.
처음 게임을 만들었던 것은 초등학교 시절 RPG쭈꾸르, 95, 2000로 만들었지만 정작 프로그래머가 된 이후에 스스로 제대로 된 게임을 만들어 본 적은 없었다.

 나는 프로그래머지만, 게임 프로그래머가 아니다. 프레임워크나 애플리케이션단을 주로 개발하기 때문에 게임을 어떻게 개발하는지도 모르고 게임업계에 종사하고 있지도 않다. 그러나 게임을 만드는 것은 프로그래머의 로망이 아닌가 싶다.

 게임을 만들기로 마음 먹은 이후 우선은 안드로이드로 만들기로 했다.
 시작하는데는 아이폰이 더 좋을것 같지만, 안드로이드를 선택한 이유는 맥북이 없다는 점과 내가 Java나 안드로이드 개발 스킬이 뛰어나고(?) GIS 안드로이드용 엔진을 개발했으니 괜찮겠다라는 생각 때문이었다. 지금 생각은 맥북을 당장 사고 싶을 뿐이지만 사지 못하는 이유는 지금까지 공부한 것들이 아깝고 또한 안드로이드 게임 앱으로 조금이라도 광고 수익을 낸 이후에 사겠다는 목표를 세웠기 때문이다.

 처음에는 게임을 만드는 법을 배워야했다. 웹에서 다양한 강좌를 보고 공부를 했다.
지금까지 내가 공부해온 길은 다음과 같다.

1. VIew, SurfaceView
2. GLSurfaceView
3. Android Game Engine
4. COCOS2D



1. VIew, SurfaceView 
처음에는 View에 그림을 그리는 것부터 시작했다. GIS 안드로이드 엔진을 View에 그리는 형식으로 했기 때문에 쉬웠다. 스레드를 돌려서 이미지를 계속 그려주는게 아닌 이벤트가 발생했을 때만 그려주면 되기 때문이다.

그러나 게임에서는 당연히 적합하지 않다. 끊임없이 그려줘야 하기 때문에 SurfaceView를 써야 한다는 걸 알았다. 웹에서나 몇몇 책에서는 이 방식을 통해서 게임을 개발하는 방법을 소개한다. 그러나 나는 이 방식이 마음에 들지 않았다. 무엇보다 메모리를 많이 잡아먹고, 속도도 느리며 이렇게 개발해서는 제대로 된 게임을 개발하기는 힘들어 보였다. 

2. GLSurfaceView 
 안드로이드 커뮤니티에서 관련 게임 강좌를 보던 중에 제대로 된 게임 소스를 먼저 분석해야겠다고 생각했다.
문제는 괜찮은 게임 소스를 찾기가 힘들었는데 웹에서 찾던 중에 girlaem님의 블로그에서 아이폰 및 안드로이드용 게임을 만든 것을 소스를 공개한 것을 찾았다. (지금 가보니 블로그를 닫으셨는지 없어졌다.)
 소스를 분석해보니 GLSurfaceView를 사용하는 완전 새로운 형태인 것이다. OPENGL ES 사용경험이 없던 나는 그때부터 신세계였다. 책과 웹에서 OPENGL ES 관련 강좌를 찾아서 보기 시작했다. 이미지 하나를 텍스쳐로 출력하는데까지 꾀 오랜 시간이 걸렸다. 마지막에 이미지가 에뮬레이터에서는 출력이 되는데 실기에는 출력이 되지 않아서 고생했는데 알고보니 OPENGL ES에서 쓰는 이미지의 사이즈는 2의 배수(2, 4, 8, 16, 32, 64, 128 ...)가 되어야 하는 것이었다.

3. Android Game Engine 
 OPENGL ES를 기껏 공부해놓고는, 게임 엔진을 찾아서 조사를 시작했다.
사실 처음부터 엔진을 사용해서 쓸까하다 포기한 이유는 공부 차원에서 엔진에서 하는 일을 직접 만들어서 사용하고 싶은 생각이 있었기 때문이다. 물론 괜찮은 생각이었고 잘 진행되고 있었지만 공부를 하면서 하다보니 개발속도가 너무 느렸다. 게다가 퇴근 후 틈틈히 하다보니 시간도 절대적으로 부족했다. 이대로 가면 언제 완성될지도 모르겠고 게임 퀄리티도 높을지 미지수였다.
 그래. 결론은 엔진이다. 라는 생각이었다. 엔진 사용법을 공부해야 한다는 것이 단점이지만 어쩔 수 없다.
처음 눈여견 본 것은 rocken이라는 엔진인데 이것이 없어지고 AndEngine이라는 것이 대체되었다. Android에서 최적화 되어 있다는 점이 매우 맘에 들어서 AndEngine을 사용하려고 했다.
 그러나 타 엔진들도 마찬가지지만 가장 큰 문제에 직면했다. 어떻게 사용하는지를 모르겠다는 것이다. 아니 대체 왜 게임엔진들은 문서가 이렇게 없다는 말이냐, 아니면 예제 게임 소스라도 구하기 쉬워야 할 것 아니냐는 말이다

* AndEngine의 문제
 - 안드로이드에만 최적화 된것이 장점이자 단점
 - 구조가 OOP답지 않다. 맘에 안 든다.
 - 문서 및 튜토리얼이 너무 없다. 내가 못 찾는지 몰라도 영문 블로그나 포럼을 찾는데도 너무 힘들다.
    (위에 말한대로 다른 엔진들도 거의 마찬가지..)

여러가지 엔진들을 보다보니 각각의 엔진들의 장단점이 있기 마련인데 제일 좋은 엔진은 언리얼 엔진인 것 같다. 멀티 플랫폼이 가능하고 상용 엔진중에서는 제일 좋지 않은가 싶다. 아이폰이나 안드로이드 부분은 가격도 저렴하다. 내가 살 수 있을 정도는 아니고, 업데이트 할 때마다 추가 구매해야 하지만 좋은 엔진임에는 틀림이 없다.

멀티 플랫폼 얘기가 나와서 말인데, 전문 게임 업계 종사자도 프로그래머도 아닌 나로서는 너무나 힘든 부분이다. 각각의 플랫폼에 맞춰서 개발을 각각 한다는 것은 개발자로서는 정말 최악이다. 각각의 환경에 최적화시키는게 좋을지는 몰라도 유지보수나 일관성 면에서는 떨어지기 때문이다. 

커뮤니티에서 보다보니, 보통은 아이폰에 맞춰서 개발을 한다 한다.  안드로이드의 백버튼이나 메뉴버튼은 무시하고 말이다. 그리고 개발은 C++로 개발하고 아이폰이나 안드로이드에 맞춰 포팅한다고 한다. 
 근래 나한테는 제일 매력적으로 보이는 엔진이 COCOS2D인데 VisualStudio환경에서 C++로 개발한 후에 아이폰과 안드로이드로 포팅한다고 한다. 정말 매력적이지 아니한가 >.<

 남은 하나의 과제는 아이폰이 기기가 몇 안되는 반면에, 안드로이드는 기기별 화면 크기가 다양하다. 이를 어떻게 맞추는지가 아직 미지수다. 화면 크기별로 따로 개발하는 방법도 있지만 이는 역시 좋은 방법이 아닌듯하다. 혹시 이 방법에 대해서 잘 아는 게임전문가분이시라면 답변 좀 달아주시기 바랍니다.

4. COCOS2D 
 나의 선택은 COCOS2D였다. COCOS2D X가 많이 끌렸지만 우선은 COCOS2D로 개발하기로 했다.

* 장점
 - iPhone과 관련하여 개발 문서가 많다.
 - 구조가 잘 되어 있다.
 - 무료 엔진
 - 공부하고 나서 아이폰 개발이나 COCOS2D-X로 개발해도 좋을것 같다 

* 단점
 - COCOS2D엔진 자체가 아이폰에 최적화되어 개발된 것을 안드로이드용으로 만든 것
 - 아직 버그가 많다. (내가 느끼기엔)
 - 안드로이드용 문서나 자료가 별로 없다

우선 당장은 어제 COCOS2D로 개발하다가 짜증이 폭발했다. 콜백이 안되고 OPENGL ES가 이미지를 제대로 출력하지 않는 문제가 계속 발생했다. 내가 뭔가 잘못한지 알고 적은 안드로이드 문서나 아이폰용 소스를 많이 찾아보았다.

그런데 결과는 엔진 문제였다. 아직 문제가 많은 것 같다. 이 문제는 최신 버전의 COCOS2D로 바꾸고 나니 해결되었다. 다만 엔진 버전이 바뀌면서 클래스명이나 메소드 규격에 변화가 있으니 조심해야 한다.
 대표적인 것으로서 구버전은 MenuItem의 콜백이 public void 콜백메소드명()으로 되지만, 최신 버전의 경우에는
public void 콜백메소드명(Object o)로 되어 있다. 이게 틀리면 해당 메소드명을 찾을 수 없다는 예외가 나버린다.


Reference
[1] 언리얼 코리아 ( http://www.udk.com/kr/index.html )










 



 

Comments

  1. 디치리 2012.01.31 22:42 신고 Permalink Modify/Delete Reply

    안녕하세요. ^^ 게임업계에 종사하고 있습니다. 안드로이드 기기들의 다양한 해상도에 대한 대응은 결론부터 말씀드리면 이미지리소스의 리사이징밖에 답이 없습니다. 보통 800*480 사이즈에 최적화를 시키고 나머지는 조금 늘리거나 남는 공간을 버려버리거나 하는 방법을 사용합니다. 부족한 답변이지만 도움되셨으면 좋겠습니다.

    • 아틴 2012.02.02 10:10 신고 Permalink Modify/Delete

      안녕하세요 디치리님.
      너무 감사드립니다.

      이미지 리사이징이나 해상도별 개발방법에 따라서 고민은 해보았지만 어떻게 해야할지에 대해서 잘 몰랐거든요.

      좋은 답변 감사드립니다. ^^

  2. 아즈라엘 2012.01.31 23:52 신고 Permalink Modify/Delete Reply

    반갑습니다. cocos2dx를 사용하게 될 경우 안드로이드에서는 jni 방식으로 구현하게 됩니다.
    게다가 소스 호환성이 높아져서 포팅에 유리한 잇점이 많이 생기게 되고요..

    현재 cocos2d-android 는 jar 형태로 java단에서 작업하는데 이보다 low 레벨이지만
    cocos2dx로 c++로 개발하시는게 앞으로 공부하시는데 더욱 좋을듯 합니다. ^^

    • 아틴 2012.02.02 10:14 신고 Permalink Modify/Delete

      안녕하세요 아즈라엘님. 답변 감사드립니다.
      그렇군요. ㅎㅎ 아 역시 게임개발은 C++이군여.

      이번에는 한번 게임개발을 완성해보고, COCOS2D-X로 넘어가봐야겠습니다. 조언 감사합니다.

  3. 케이_ 2012.11.13 15:06 신고 Permalink Modify/Delete Reply

    댓글을 안 달 수가 없네요.
    다 읽고 창을 닫을 수가 없어서 댓글 달고 갑니다.
    잘 읽었습니다.
    별 내용 없는 글인데도 근래 보기 드문 지식이 담겨있군요.
    진짜 개발자가 맞으시네요.
    요즘 이런 내용을 적는 개발자가 점점 줄어들고 있네요.
    한 일주일 날려보낼 시간을 한 페이지 글로 다 배워갑니다.
    감사합니다.

    • 아틴 2012.11.13 16:26 신고 Permalink Modify/Delete

      감사합니다. 요즘 다른 일이 바빠서 개발을 이어서 하지 못하고 있는데 댓글을 보니 힘이 나네요. 시간 나서 더 개발해보고 좋은 포스팅하도록 노력하겠습니다. ^^

Leave a Comment


to Top