cocos2d-x Unity3D 처럼 쉽고 빠르게 개발할 수 있을까?

 cocos2d-x로 게임 개발하시는게 많이들 불편하시진 않았나요? 퍼포먼스 이슈나 외부 SDK 연동 이슈 같은 것을 제외하고라도 첫 시작인 프로젝트 개발 환경 설정하는 것에서부터 최종 빌드하는 것까지 마무리 할려면 한번쯤 곤욕을 치루게되죠. 제 블로그의 수많은 포스팅들이 그 것을 증명?을 해주고 있습니다. 상용 엔진이 아닌 오픈소스 엔진이다보니 어느정도 불편함을 감안한다고 하더라도 많은 사람들이 스트레스를 적잖이 받은건 사실입니다.


cocos2d-x 2.1.4 업데이트

 약 하루전에 cocos2d 씨리즈가 5번째 합동? 릴리즈를 했습니다. 지속적인 업데이트가 이루어지는 모습 보기 좋네요. 간단히 하이라이트를 보면,

Highlights

  • Added support for XMLHttpRequest and WebSocket on JSB
  • Added support for encoded JavaScript files and add command line tool for generating javacript code
  • Upgraded Spidermonkey to v21
  • Added support for Emscpriten and Tizen port, usage of Emscpriten and usage of Tizen
  • AssetsManager downloads resources in a new thread
  • CCLabelTTF supports shadows and stroke
  • Added support for ETC1 image format on Android
  • Added many test cases for Lua bindings
  • Added more plugins: weibo, twitter

 위와 같고 자세한 업데이트 체인지 로그는 링크를 통해 확인할 수 있습니다. 크게 눈에 띄는건 WebSocket 추가, CCLabelTTF에서 그림자 처리 지원, Lee Jae-Hong님께서 cocos2d-x를 타이젠으로 포팅하신 것이 정식으로 적용된 것이 눈에 띄네요.


cocos2d-x Component Based Programming

 cocos2d-x 개발 하소연? 하다가 뜬금없이 업데이스 소식을 정리했을까요? 이번 업데이트의 하이라이트에는 소개되지 않았지만, 눈에 띄는 반가운 기능이 있어서 그것을 소개해 드릴려고 운을 띄워봤습니다.

cocos2d-x-2.1.4\cocos2dx\support\component

cocos2d-x-2.1.4\extensions\Components

 제가 작년에 하던건데 중간에 홀드 되었던게 있습니다. cocos2d-x에 컴포넌트 기반 프레임워크를 작업하고 있었죠. 그런데 드디어 cocos2d-x에 컴포넌트가 추가되었습니다. 이것이 무엇을 의미할까요? 유니티3D를 모르시는 분들이라면 예전에 컴포넌트 베이스 프로그래밍(Component Based Programming) 개념을 간단히 정리했으니 링크를 참고하세요.

 쉽게 유니티3D 처럼 구현해야할 기능들을 컴포넌트 단위로 작게 만들고 레고 블럭 조립하듯 붙여나가면서 개발할 수 있는 기틀이 마련이 되었다는 것이죠. 중요한 Component와 Attribute는 보이는데 Entity가 없네요. 소스를 보니 CCNode를 엔티티 개념으로 사용하려는 듯 합니다.


cocos2d-x 컴포넌트 기반 개발에 날개를 달아줄 FrontEnd. Coco Studio

 하지만, 단순히 엔진에 컴포넌트 객체가 추가 되었다고 바로 유니티3D 처럼 쉽게 개발할 수 있는건 절대 아니죠. 유니티3D 처럼 쉬운 C# 같은 스크립트 기반에서 컴포넌트를 처리해야 할테고 역시나 유니티3D 처럼 프론트엔드 툴이 있어야 그래픽 아티스트나 기획자분들도 쉽게 접근할 수 있게 되겠죠.

 사실 필요 충분 조건인 프론트앤드 툴과 스크립트는 어느정도 이미 갖추어져 있습니다. CocosBuilder이라는 프론트앤드 툴이 있고 이미 cocos2d-x는 JavaScript와 Lua를 지원하고 있죠. 코코스빌더는 맥에서만 작동하는 제한이 있지만 각종 cocos2d-x 지원 객체등의 Layout 처리나 Animation, Sound, Event Bind 등 Scene을 구성하는 요소들의 처리를 플래쉬 처럼 쉽게 구성할 수 있는 툴이죠. 거기다 JavaScript와도 연동이 되기 때문에 어찌보면 이미 유니티3D의 그것과 비슷하다고 할 수 있습니다. 하지만 엔진딴이 컴포넌트 구조가 아니었기 때문에 이게 다였죠. 물론 코코스빌더에서 구성한 Layer나 객체를 사용자 정의 클래스와 바인드도 가능하긴 합니다만 유니티3D에 비할것이 못 되죠.

 그런데 Cocos Studio라는 멋진 물건이 있네요. 기능들이 너무 많아 다 나열하긴 그러니 링크를 참고하시기 바랍니다. 공식 홈페이지는 이 곳입니다.

 cocos2d-x를 베이스로 CocoStudio Framework가 있고 그것을 토대로 UI, 에니메이션, 데이터, 신 구성등을 쉽게 작업할 수 있는 통합 툴이네요. CocoStudio Framework가 Entity, Component System으로 되있다고 합니다. 이 툴로 유니티3D 처럼 작업을하고 코드작업은 자바스크립트로 하면 되는 것이죠. 컴포넌트로 작업하기 어려우신 분들은 기존방식대로 객체지향 상속구조로 작업하셔도 무방합니다.

 또한 코코스빌더는 맥에서만 되던것에 비해 Coco Studio는 윈도우 기반 툴입니다. 실행할때는 닷넷 프레임워크 4.0이 필요하구요. 호불호가 갈리겠지만 윈도우에서 작업하시는 걸 선호하시는 분들에겐 희소식일듯 하네요.

 아직 0.x때 버전이라 많은 버그가 잔재하고 기능이 부족하겠지만 cocos2d-x와 같이 꾸준히 업데이트 된다면 정말 cocos2d-x는 2D게임 개발 최강 엔진이 되지 않을까 생각됩니다. 혹시 또 모르죠, 나중에 유니티3D의 에셋 스토어 같은 cocos2d-x 에셋 스토어가 생길지도요? 아무튼 기대가 되네요~

 공식 사이트에서 0.1.7을 다운받아 설치해봤습니다. 일단 런처?까지는 실행이 되는데요,

 Action Editor은 이상한 에러를 뿜으면서 안되는군요. UI Editor은 반응이 없고,

 Scene Editor은 이상한 메세지를 출력하고 진행이 안됩니다.

 딱하나 Data Editor만 실행은 일단 되네요.

 마지막으로,

//NCEntity.h

#pragma once

#include "CCObject.h"
#include "CCArray.h"

#include "Core/NCMacro.h"

USING_NS_CC;

namespace NECO
{

class NCComponent;

/**
@brief 사물을 표현하는 최상위 게임 객체 Entity
@author WWForever
*/
class NCEntity : public CCObject
{
DECLARE_CLASS( NCEntity );

public:
void Init();
void Terminate();

void BeginFrame();
void FrameMove();
void EndFrame();
//void Render();

//////////////////////////////////////////////////////////////////////////
///< Entity
inline bool operator == ( const NCEntity& entity );
inline bool operator != ( const NCEntity* entity );

CC_SYNTHESIZE( int, iType, Type );
//////////////////////////////////////////////////////////////////////////
///< Component
public:
void AttachComponent( NCComponent* pComponent );
inline bool HasComponent( char* pszComponentName );

template< typename T > inline T GetComponent( char* pszHash );

int GetComponentNum();

protected:
inline NCComponent* GetComponent( int iId );

CC_SYNTHESIZE_READONLY( CCArray, pComponentArray, ComponentArray );

//////////////////////////////////////////////////////////////////////////
///<
// Attr 작업.

};

}


//NCComponent.h

#pragma once

#include "CCObject.h"

#include "Core/NCMacro.h"

USING_NS_CC;

namespace NECO
{

class NCEntity;

/**
@brief 컴포넌트 최상단 클래스. 필요한 행위, 처리들은 이것을 상속받는다.
@author WWForever
*/
class NCComponent : public CCObject
{
DECLARE_CLASS( NCComponent );

public:
virtual bool Init();
virtual void Terminate();

virtual void BeginFrame(){}
virtual void FrameMove(){}
virtual void EndFrame(){}

bool HasEntity();

void SetId( char* pszName );

//virtual bool HandleCommand( Command* pCommand );

//////////////////////////////////////////////////////////////////////////
CC_SYNTHESIZE( NCEntity*, pOwnerEntity, OwnerEntity );
};

}

 위에서 언급했던 작년에 cocos2d-x 기반 컴포넌트 프레임워크를 만들다가 홀딩이 되었던 Component 객체의 h 파일을 올려봅니다. 작년 말까진 했던 프레임워크와는 다른 초반에 작업되다가 홀딩된 녀석들인데요, 이외에도 Manager 개념도 있었는데 아무튼간에 cocos2d-x에 추가가 되었으니 맘편히 삭제해보기 전에 블로그에 흔적을 남겨봅니다~ 이제 지워야겠네요 ㅎ;

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.