TECHNOLOGY - 積み上げた技術力・開発力〜コンポーネントデザイン

積み上げた技術力・開発力 –コンポーネントデザイン-

ゲーム開発を支えるコンポーネントについて

技術力・開発力の積み上げは、それぞれを重要なコンポーネント(部品)としてデザインすることで実現しています。それぞれ規模は異なりますが、役割は3つのカテゴリに分類できます(下図参照)。

ゲーム開発を支えるコンポーネントたち

ゲームエンジンの『Unity』はDeNA独自ではありませんが、より上位のコンポーネントや内製ゲームエンジンとの関係が理解しやすくなることから記載しています。
図の下側がより汎用的で用途を制限しないものとなり、上側のコンポーネントほどゲームの仕様や作り方に制限がかかります。『Unity』や『Cocos2d-x』などゲームエンジンは比較的汎用性がありますが、ゲームエンジンならではの制限もあるため中段に位置しています。

『LiftEngine(2D/3D)』のような内製ゲームエンジンについては、意図的に作り方に制限を与えるようにしています。

これらのコンポーネントが、DeNAではどのような組み合わせで使われているかをご紹介します。

コンポーネントとタイトル群

なぜ制限するのか?

用途を限定する、より制限の厳しいコンポーネントもかなり使用しています。汎用性の高い『Unity』を使用するのに、なぜ工数を使ってまで制限をかけているの? と思われるのではないでしょうか。
理由は明確にあります。それは、汎用的なものを使用することで思い通りのものが作れるわけではないからです。

弊社がネイティブゲーム開発への挑戦を始めた頃にはまだ、メインループを回すようなゲームシステムを一から作ったり、『Unity』や『Cocos2d-x』などの市井のゲームエンジンの使用したりする経験が不足していました。その状況で汎用性の高いゲームエンジンを使用しても、とりあえず船を渡すから太平洋を横断しろと言われているようなものです。

また、人間は多くの選択肢を示されても中々選ぶことができません。
だからこそ、作り方に一定の制限を設け、最初の選択肢を少なくしました。これによって、ゲーム開発経験の少ない人材でも迷わずに作りはじめることができました。
作り方を制限しても、ゲームの種類が限られてしまうことはありません。制限の中で工夫することでアイデアを形にできます。また制限を超えるアイデアが生まれたのであれば、それに合わせて制限自体を調整することも可能です。

積み上げたコンポーネントが汎用的なものであっても、より上位のコンポーネントによってある程度の制限をかけることで、将来の拡張性や自由度がしっかりと担保されて、開発者のスキルアップに合わせて自由度を上げることが可能です。

コンポーネント詳細

我々がネイティブアプリ開発を始めて、最初に積み上げ始めたのは『Sakasho』、『DeAL』、『LiftEngine』の3つです。次に、『Unity』用の『DnSystem』や『WebViewPlus』が開発され、さらに『UISystem』、『AnimationEventBundler』、『D4L』などが開発されました。
『AnimationBuilder』や『ParticleBuilder』などはもともと『Kickmotor』以前に作られていたもので、『LiftEngine』上で利用できるようにするためにリファインされました。また、これらのツール資産を活用して、『LayoutBuider』と呼ばれるUI作成ツールや、『SequenceBuilder』と呼ばれるアニメーションに様々なイベントを設定するためのツールも作られています。
『LiftEngine』の第一弾タイトルが開発されている頃、『IRIS』の開発がスタートしました。『IRIS』は、ゲームエンジンに非依存なマルチプレイゲームを実現するための環境として開発されました。
以下では、『Sakasho』、『DeAL』、『LiftEngine』、『IRIS』についてご説明します。

1. Sakasho

ゲームアプリ時代に合わせたアカウント管理、ユーザーデータ管理、課金処理、マスタ配信、アセット配信、CS対応のための仕組みなど、モバイルゲームをサービスとして提供するために必要なプラットフォーム的機能を提供します。これらの機能をゲーム開発者が簡単に利用するための機能を含め、開発から運営まで広くサポートします。
ネイティブゲームアプリ開発においてサーバーサイドでやるべき事をすべて引き受けることにより、各開発チームはクライアント側の開発に専念できます。

2. DeAL

ゲームエンジンやミドルウェアに依存しない、一環したゲームサウンド作りを可能にするためのクロスプラットフォームなサウンドエンジンです。サウンド再生における様々な決め事を、できるだけサウンドデザイナーに委ねるための仕組みを提供します。
ライセンスフリーな各種サウンドフォーマットに対応しつつ、ポイントループ再生やDSPエフェクトなど、演出のための機能だけでなく、サウンドデータのリソース管理機能なども提供しています。
プロジェクトファイルを利用することで、多数のサウンドデータをバンクに分けて管理することができるため、消費リソースをコントロールしながらオーディオデータを作成することができます。

3. LiftEngine

『Cocos2d-x』をベースとする2Dゲームエンジンとしてスタートしました。
汎用な『Cocos2d-x』の上にネイティブゲームを作るためのルールを整理されたAPIによって提供し、さらに『Cocos2d-x』には無いゲーム開発に必須な各種機能を提供するゲームエンジンです。
大半のコードがLiftEngine独自のものに置き換えられており、オリジナルのcocos2d-xでは出せない圧倒的なパフォーマンスを提供しています。
また現在、完全オリジナルの3D描画機能も実装されており、算術演算、グラフィックスパイプライン、データフォーマット含めてハイエンド3Dグラフィックスと同等の技術世代へと進化しています。

4. IRIS

モバイルアプリ間でのリアルタイム通信機能を提供するための、C++で実装された高速に動作するリレーサーバーです。
ゲームがリアルタイムマルチプレイを実装するにあたって、必要になりそうなゲーム状態同期のための機能や階層型ロビー、キャラクタ等の位置同期のための専用機能など、単純なメッセージのやり取りに留まらず、関連して必要になる様々な機能も提供しています。
また、『Sakasho』との連携機能も持っています。『Sakasho』でのログイン認証やマルチプレイタイトルのための高度なマッチング機能(ボックスマッチングや全アクティブユーザーを対象にしたマッチングなど)を『IRIS』のバックエンドに追加することができるような拡張も可能になっています。

コンポーネントを使ったタイトルの基本構造

ソフトウェアは、大まかに下図のような構造になります(※アプリケーションが一番下に位置しているのは、通信等のデバイスに近いレイヤーをサーバー寄りに配置したため)。
アプリケーション(ゲームごとへの専用の実装)以外の部分がかなり多くなっているのは、ゲーム開発において面白さなどのゲーム作りの本質に注力することができることを意味しています。積み上げたコンポーネントを活用することで、ゲームクリエイターは面白いゲームの開発に100%コミットできるようになります。

アプリケーション構成図

使用技術一覧

[Server Side]

Programming Languages
C++11, Ruby
Application Frameworks
Sinatra, Ruby on Rails
Middlewares
nginx, Redis, MySQL, Unicorn
Libraries
FlatBuffers, libuv, libcurl, lz4, hiredis, openssl, gtest, gflags, ...
Build Tools
CMake, gcc, clang

[Client Side]

Programming Languages
C++, C++11, C#, Objective-C, Java
Libraries
ProtocolBuffers, FlatBuffers, libuv, libcurl, lz4, openssl, rapidjson, jsondiffpatch, FreeType,
ogg, opus, UniRx, Moq, T4, UnityTestTools, ...
Build Tools
CMake, gcc, clang, VisualStudio

RECRUIT - 募集職種一覧

「DeNAのイメージを破壊」してくれる、ゲームクリエイターを常に募集しています。

EVENT - イベント

座・芸夢HEATGame Developer's Meeting
PAGE TOP

DeNA for GAME CREATORS