質問: こんにちは。 UnityやCocos2dx、Unreal Engineなどのゲーム開発環境を使ってゲームアプリを開発していますが、 UIが必要なアプリケーションの開発なら、基本的にこれらの開発環境を利用した方が開発段階でのメリットが多く、開発速度が数倍上がるように感じています。 例えば、メモアプリやタイマーのような、ツール系アプリの場合はどうなのでしょうか。 ### ゲームエンジンの処理は基本的に重い? ほとんど画面に動きの無いアプリの場合 上記のようなゲームエンジンと呼ばれる開発環境で作ったアプリと、 AndroidStudioやXcodeで作ったアプリを比べると、バッテリー消耗が激しいのでしょうか? 開発速度やバグの発生率、メンテナンス性等のメリットを考えると、多少バッテリーを使う程度ならゲームエンジンで開発したいと考えていますが、どれくらい変わるのでしょうか。 前者はOpenGLのようなグラフィックスライブラリのエンジンが常時動いているために、CPUやGPU、メモリの使用に無駄があるのではないかと思うのですが、 個人的に触ってみた体感では、UnityやCocos2dxはほとんどわかりませんでしたが、UE4は何も処理をしなくてもバッテリー消耗が激しいように感じました。 皆様のご意見をお聞かせください。
回答: 質問時は、まだ実際に着手するつもりは無かったのですが、時間が取れたので この2週間くらいでツールアプリ(タスク管理アプリ)をCocos2d-x(CocosCreator)で実際に作ってみました。具体的にどんなものを作ったかは、控えさせていただきます。 レポートというわけではありませんが、いくつか所見を書かせていただきます。 ### CocosCreator1.1.2/Cocos2d-xという選択 ツール系アプリは基本的に2Dなので、3Dグラフィックエンジンは必要ありません。したがって、Cocos2d-xを選択しました。 Unityに比べるとCocos2d-xはネイティブとの連携(通知、SNS投稿、アプリ内課金、広告)の労力が大きいと感じました。 しかし、これらの機能は一度作ってしまえば今後はそのまま使いまわせる資産になるので、2作目以降は大きなデメリットではないかもしれません。 問題は、CocosCreatorで作っている人があまりに少なく、情報が無いことでした・・・。今に始まったことではありませんが。 SDKBoxとjsbを利用して、とりあえず上記の4つは実装には成功しました。 端末内の他アプリとの連携(LINEに送るなど)は、今回実装しませんでしたが、かなり苦労しそうです。 ### パフォーマンス これらは、かなり大まかに感じとったものですが・・・ 起動速度は、Android、iOS共に実機でもシミュレータでも2秒弱(スプラッシュ0.5sec+黒画面1.5sec)掛かります。許容範囲だと感じました。 スプラッシュが消えてから画面が表示されるまでが若干長いので、これ以上長くなると遅いと感じるかもしれません。 非アクティブ状態からの復帰は他のアプリ等と全く変わらないと思います。 CPU・GPUに関しては、データとして提示できませんが・・・これらも許容範囲だと感じました。 updateメソッドを利用したフレーム処理が一切無いので、デバッグで表示されるコール回数を見る限りでは、フレーム更新の度に描画をしているというような事はなさそうです。 ウィンドウ(ノード)のポップアップ等にアニメーションをつけると、アニメーション中だけフレーム毎に全てのノードを描画します。もちろんエンジンによって、同じ階層なら1度にまとめる等の最適化はされています。 アニメーションをさせまくるとバッテリー消費が激しくなるかもしれませんが、 バッテリーに関しては、特に消耗が激しいとは感じませんでした。 別のタスク管理アプリ「Todoist」と同時に、同じような内容のタスクを作成したりしてiPhone6で一日使ってみたのですが、バッテリー消費率はTodoistが1%上なくらいで、ほぼ変わりません。表示している時間の差や、ネットワーク使用有無の差から来ている程度でしょう。 ### CocosCreator/Cocos2d-x特有の苦労 CocosCreator/Cocos2d-xという環境でも、スクロールビューやEditBox(テキスト入力フォーム)、ラベル(テキスト)といった基本的なUI部品は揃っています。 ただ、このまま使うには細かな問題が多いと感じました。 < スクロールビュー > 今回はタスクのリストを縦スクロールビューで表示するのに利用しようと思いました。 タスクを横にスワイプすると削除、という機能を実装したかったのですが、 このスクロールビュー内では、タッチダウンのイベントは発生しますが、タッチムーヴやタッチアップのイベントは発生させない仕様のようです。 スワイプによるスクロールとタップを分けるためなのでしょうが、これではスクロールビュー内のノードへの操作ができないので、スクロールビューの機能は自前で作りました。 < Edit Box > Cocos2d-xのEditBoxは、昔に比べると改善されたそうですが、今でも特にiOSではバグがあるそうですが 何より問題なのは、フォントやアトリビュートを設定できないことです。 ゲームアプリと違ってツール系アプリは文字情報が多くなりやすいこともあり、フォントやアトリビュートは一番重視すべき部分だと思います。太字くらいは設定できないと、瞬間的に情報が読みにくいです。 キーボード表示までは試みましたがその時点で難航し、EditBoxの自作は断念しました。 通常の利用には問題ないので、入力時はEditBoxを使用して、入力が終わったらEditBoxを非アクティブにして、代わりにLabelを使うことにしました。(EditBoxの不具合の一つとして、スプライトではないためかNodeに設定されたOpacityやColorは無効) < Label > 一番基本的なUI部品ですが、UnityやUEに比べると問題点が多いです。 まず、日本語を正常に表示できないフォントがあります。macにもwindowsにも入っている標準的なフォントを試してみましたが、一部フォントではひらがなとカタカナが参照できていないようで、「□」と表示されてしまいます。アルファベットなら全く問題ありません。 また、Labelと同じノードに追加するコンポーネントとして、Label Outlineというものがあります。 これはLabelのテキストの輪郭にそって表示するシャドウですが、たまに表示されない時があります(再現性がない)。 ちなみに、CocosCreator1.1.1までは、テキストがノードからはみ出した時の対応でShrink(フォントサイズを小さくするという対応)にしている時に致命的なバグが起きてエディタが強制終了することがありましたが、修正されました。 ### まとめ CocosCreator1.1.2/Cocos2d-x特有の苦労や、完成したアプリの挙動のデメリットは多いですが、それよりも開発のメリットが多く、デメリットは許容範囲だと感じました。 また、今回は使いませんでしたが、ゲームエンジンを使えば、パーティクルやアニメーション実装の労力が格段に減ります。 エフェクト等のグラフィカルな方向に注力されたツール系アプリというのも面白いと思いますし、そういったものは今の市場には少ないのではないでしょうか。 ご意見いただいたお二方には申し訳ないですが、今後、同じような事を考えている方のために書き残しておきます。ありがとうございました。