Webエンジニアがネイティブやってみるときの開発環境選定

2015年11月14日

本題に入る前にちょっとだけ前置

僕は元々は、ソーシャルアプリゲームとかwebサイト制作等の裏側を書いていたWebエンジニアでした。

ちょうどGREE/DeNAのプラットフォームでコナミの「ドラコレ」・「ドリランド」等がヒットしていたソーシャルアプリ戦国時代です。

一発ヒットで億単位でもうかるという恐ろしい課金型アプリがではじめたときですね。

数年はソーシャルアプリで、飯食えると思いましたが、時代の流れは早いもので、あっちゅうまにApp Store/Google Store上のIOS/Androidの方へ世間がシフトしていく流れがありました。

せっかく、ソーシャル覚えたのにぃ的な。

スポンサーリンク

ネイティブやろうと思ったきっかけ

Web技術だけでも正直業務系システム・自分で0からサービス等が作れれば、飯を食えないということはないと思います。
というか全然自分の作ったサービスを世間に広める能力とそのサービス自体がうまくいけば、金には困らないと思います。

でも僕は、まだ三十路だし?!できることは「ガンガン」増やそうというスタイルなので、2013年頃から会社から帰るとネイティブアプリの勉強を始めました。

でも環境どうしよ??

最初に浮上したのが、、、これですね。

そもそもobjective-c/javaもほとんどやったことないし、両方覚えるの「しんどー」と思いました。

そこででたのが、クロスプラットフォーム対応の「unity」・「cocos2d-x」の二極でした。

3Dを作る前に僕は元々2D制作が多かったので、同じく2D制作を仮定にし、かつ3Dの情報も載せていきます。

unity

unity公式サイト
多分日本のネイティブ開発では、かなり使われているGame Engineだと思います。

2d~3dまで対応していて、C#,JavaScript,Boo(Python)言語で開発が可能。

ライセンスも無料(起動時とかにロゴでちゃいます)・有料版もあります。

ロゴでてもいいやぁ・とりあえず3Dゲームやってみたいしなぁという方なら無料版でもいいかと思います。

素材もunityのアセットという素材販売サイトがあるので、3D/2Dの素材が有料〜無料まであり、unityちゃんという専属のフリーモデルの素材もあるので、そちらがオススメです。

導入するか検討してみた

個人利用レベルで導入するか検討してみました。

プログラミング的には、vbぽく使えるC#もjsもあるし、学習コスト少ないしいいなぁと思いました。

実際にキャラ配置して、大地を作って、キー操作でキャラクターを動かしたりするのは、割と簡単(アセット)使ったり・キャラ動かすロジックがあるので、プログラミングやってない人も1日もたたずそこまでいけると思います。

unityはノンプログラマーさんでもアプリを出している人がいるくらいです。
アセットにはプログラム込みのものがありますので。

脱出系ゲームとかピンボールみたいなシンプルな3Dのゲームなら初めてでも頑張れば作れると思います。

3D素材作成が厳しい

僕も3Dもやってみたいなぁと思ったのですが、ガチで3Dをやろうと思うと一人で3Dモデルでキャラを作成したりしないといけないし、モデリングで簡単なものはできても、キャラクターとなるとかなり敷居があるし、ソフト入れてみましたが、学習コスト半端ない。。。と思い挫折しました。

無料アセットだけでは、限界があるのと有料版でも中身をあけると(バグ・意図)しないものが混入していることはあるようです。

ある程度の利益を見込めるアプリにするのには、無料だけではオリジナル性もないので、アプリだすだけで終わっちゃうなぁと思ったからです。

無料アセットのunityちゃんを走らせて、遊んで導入検証終了しました。

2Dやるのどうなの?

unity2dがあるので、それで制作しますが、基本的に3Dをベースで作られているので、カメラの向きを2D向けに変えて作るようなイメージになります。

初めてやる方は、ちょっと違和感を覚えれるかもしれません。

UI作成は、NGUIとか専用のアセットがあるので、それを使えば、比較的簡単にGUIベースで画面設計ができます。

ただ、ゲームエンジンでのブラックボックス実装な部分があって呼び出すAPI関数の中身がわからないことやスプライト(画像)を大量に表示させた場合に動作が重たくなりやすいという情報がありました。

unityと後述するcocos2d-xでのスプライト表示等で検索するとベンチマーク結果等を出している人がいるので、参考になると思います。

unityまとめ

もし一人でやられるのであれば、3Dモデリングに関するスキルがある。

2Dやるけどそこまでたくさんのスプライトも出さないし問題ないよ。

素材については、外注・分業するしプログラムだけやるよっていう方であれば、オススメです。

プログラミングもC++とかに比べて、WEBエンジニア(PHP・Ruby)やっていれば、C#もすぐに頭に入ってくると思います。

どうして、2Dでレスポンス(描画処理に高負荷かける)を求めるのであれば、cocos2d-xをオススメします。

cocos2d-x

cocos2d-x公式サイト
unityの次にベンチマークしたのが、cocos2d-xです。

日本では、おそらく「unity」の次くらいに使われているゲームエンジンかと思います。

FFレコードキーパー・消滅都市とかgumiさんがだしているゲームは、cocos2d-xを使って開発されている記事が上がってます。

言語は、C++, Lua, JavaScriptの3種類です。

業務系ツール開発していたときに、C++やっていたので、これは、、、と思いました。

C++は、言語的にも処理速度は高速で、ファイル処理とか重たい処理を作るときは、そこだけ、C/C++で書くことがあるくらいですね。

実際に昔業務系ツール開発で、VBで作ったツールとC++で作ったツール(ファイル解析系)と処理比較しましたが、数10秒近くC++の方が早く処理が終わりました。

速攻でC++で開発することにしました。(当たり前)

また、jsも使えるのでwebview等のハイブリット(web+ネイティブ)の開発にも向いてそうだと思いました。

導入するか検討してみた

プログラミングの学習コストは、unityに比べてC++なので「ポインタの概念」とかWEB一本の方は、コスト高いかと思います。

素材について

unityのような強大なアセットストアはないので、素材は自前です。

ただ2Dをやるのであれば、個人でも素材は作成しやすいので、簡単なキャラを自分で作ってみたり、素材だけクラウドソーシング・知り合い等に外注するという手もありだと思います。

2Dやるのどうなの?

cocos studioという専用のGUI制作ツールがあるので、主にそれを使います。

なくても作れるのですが、パーツの位置とかをざっくり決め打ちでやるので、コードを書く→コンパイルして表示を確認という流れが多くて時間がかかってしまうので、なるべく画面はstudioを使います。

cocos studioで作ったものをc++で読み込ませて、ボタンの処理とかを書けばOKです。

webviewもAPIがあるので、htmlファイル呼び出しもできますので、ネイティブ画面・WebView画面のハイブリット開発も割と簡単にできます。

また、スプライト描画がunityに比べて、大量に表示できるので、弾幕ゲーとかも作れると思います。

聖剣伝説外伝のようなゲームを作りたかったので、大量にスライムを顔面に表示しても動きました。
シナリオ・キャラ数・イベント分の大量のロジック開発で、挫折しましたが、、、また、途中まで作った物を公開できたらと思います。

大量のスプライト表示実験されている方の動画があったので、ご参照ください。

ただ、studioでGUI作れるのですが、ちょっと使いにくいなぁというところはありました。

慣れたり、バージョンアップしていけば、その辺は改善されてくるといいなぁ。

cocos2d-xまとめ

ver3.x以降から3Dも開発できるようになってます。

たびたびバージョンアップされるので、ちゃんとついていけれるのであれば、2D開発にはオススメです。

オープンソースなので、最悪不具合等があっても、ソース追えればカスタマイズできます。

IOSの環境構築は、楽ちんだけど、Androidの環境構築は少し手間に感じました。

学習コストは、unityより高い気がします。C++で大量スプライト表示・レスポンス気にするものを作成するならcocos2d-xかと思います。

まとめ

unityもcocos2d-xもメリット・デメリットがありますので、自分のスキルと作るものによって、切り分けてみるのがいいかと思いました。

僕の場合、大量のsprite画像を表示するゲームを作りたかったのとたまたま昔C++を少しかじっていたので、久しぶりにやってみるかと思って選定しました。

次回は、ゲームを作った際の流れや注意するべきポイント等を記事にできたらと思います。

ありがとうございました。


スポンサーリンク
PAGE TOP