BlogKLabは、多くのスマートフォン向けゲームを開発・提供しています。スマートフォン向けゲームの開発と運用は、Webソーシャルゲームと比べて格段に複雑で、またコンシューマゲーム開発とも異なったノウハウが求められる領域もあります。このブログでは、KLabのゲーム開発・運用の中で培われた様々な技術や挑戦とそのノウハウについて、広く紹介していきます。2016/08/19クライアント開発基本ライブラリの紹介KLabでクライアント開発基本ライブラリの開発をしている鬼塚です。今回はKLabで使用しているクライアント開発基本ライブラリの紹介をしたいと思います。クライアント開発基本ライブラリとはUnityを用いたスマートフォンゲーム開発において共通して必要になる機能、及び実装ノウハウを集約したライブラリ群です。KLabではUnityを用いたスマートフォンゲームのほとんどでこのクライアント開発基本ライブラリを導入しています。現在リリース中のアプリでも使用されている為、UnityやiOS/Androidといった各PFのバージョンアップの対応やそれよって生じた不具合等の改修が日々が行われています。Unity4、Unity5どちらにも対応しているので環境を問わず利用することができます。クライアント開発基本ライブラリの概要についてはコチラの記事をご確認ください。利用してアプリ内課金を行う際に必要な機能を提供するライブラリです。商品の購入、レシート更新(iOS)、レジューム処理の機能を提供しています。(2)アセット管理ライブラリアプリ本体の起動後に必要な画像などの追加データファイル(アセットと呼びます)のダウンロード及びそれらのアセットの読み込みにまつわる様々な問題を解消したライブラリです。Pooling機構をモニタリングする機能なども提供しています。(3)チャットシステムゲーム内でユーザ同士のチャット機能を提供する際に必要な機能をまとめたライブラリです。テキストだけのやりとりだけでなく、画像を用いたスタンプや投稿した内容に対するリアクション機能なども提供しています。チャットシステムの詳細についてはコチラの記事をご確認下さい。(4)コアユーティリティ郡ファイル管理、オンメモリキャッシュ、ロケール取得、タイムゾーン取得といった、アプリケーション開発で必要となる基本的な機能をまとめています。クライアント開発基本ライブラリでは全てのライブラリでこのコアユーティリティ群が含まれています。(5)通信ライブラリHTTPやHTTPS通信にまつわる機能をまとめたライブラリです。Unity標準のWWWクラスの互換性のない仕様や挙動の吸収やリクエストキューイング、リクエストタイムアウト、自動リトライ等HTTP通信を行う上で必要な機能を提供しています。(6)WebViewライブラリiOS/AndroidのWebView機能をOSによらず透過的に扱えるようにするライブラリです。WebViewで標準的に利用可能な戻る、進む、リロード、アプリ実装との相互連携などももちろん利用可能で、その他キャッシュの無効化やUserAgentの指定、iOS8から導入されたWKWebViewにも対応しています。(7)ローカライズテキスト管理ライブラリローカライズテキストを管理するライブラリです。アプリ内テキストのローカライズを行う為に必要な表示言語、表示するテキスト、表示するテキストを参照する為のIDを簡単に管理することができます。テキストのローカライズと言語設定管理の2つの機能を提供しています。Centerのアチーブメント機能を透過的に扱えるようにするライブラリです。アチーブメントの一覧や達成状況、アンロック等各PFが提供している機能を統一されたインターフェースで利用することができます。Energy機能をOSによらず透過的に扱えるようにするライブラリです。LE通信に必要な機能が含まれおり、Peripheral機器としての利用、Central機器としての利用どちらにも対応しています。通信ライブラリについてもう少し詳しく上で紹介したクライアント開発基本ライブラリの中から今回は通信ライブラリにフォーカスしてどのような機能を提供しているかいくつか紹介させて頂きます。通信ライブラリの特徴から。FrameworkのWebClientクラスの拡張クラスのどちらを利用するかを指定できるようになっています。Unity標準のWWWクラスにはUnityのバージョンによっていくつかの互換性のない仕様や挙動があります。通信ライブラリではそれらの差異を吸収し、また機能拡張することで利用者はUnityのバージョンによる互換性のない仕様や挙動を気にすることなく開発に専念することができます。RequestTypeによる処理の切り替え通信ライブラリでは利用者が取得したいデータ形式に合わせて処理を切り替えています。通信ライブラリで用意しているデータ形式はAPIレスポンス等に使用する為のテキストデータ、Unityで使用するアセットバンドル、テクスチャ用のアセットバンドルではない画像やバイナリファイル、汎用的に使用できるファイルダウンロード等があります。リクエストキューイング通信ライブラリではクライアントから投げられたリクエストは一度キューに積まれます。キューに何も無ければリクエストを開始しますが、前のリクエストが完了していない場合はそのリクエストが完了するまで待機します。することで、複数のスレッドで通信を行った場合でもリクエストした順番に処理することができます。一度に実行できるリクエストの上限はデフォルトでは5回に設定されていますが、もちろんこの回数等は利用者が自由に変更することができます。リクエストタイムアウトリクエストがタイムアウトする迄の時間を設定することができます。モバイル通信環境で起こりがちな、電波の届かない場所での通信や、正常にレスポンスが返って来なかった場合にタイムアウトを設定することでユーザーを待たせずエラー処理を実施することが可能になります。Unity標準のWWWクラスではこのリクエストタイムアウト処理が提供されていない為自前で実装する必要がありますが、通信ライブラリではリクエストキューイング同様自由にタイムアウト時間を設定することができます。自動リトライ通信失敗時にリクエストのリトライ回数を設定することができます。一時的なネットワーク上のエラーでリクエストが失敗した場合に自動的にリトライされるのでライブラリ利用者のリトライ実装の負担と対アプリユーザへの通信失敗通知によるストレスを軽減することができます。その他その他にも通信ライブラリでは便利な機能を提供しています。HTTPRequestを同期/非同期に処理するかを切り替えることができ、この機能はUnityEditor拡張実装において複雑になりがちなHTTP通信処理実装の手助けになります。加えて、ダウンロード時の進捗状況を表示できたり、デバッグ用にダミーのレスポンスを受け取れるように設定できたりなどネットワークを扱う上で必要となる機能を提供しています。最後にこのようにクライアント開発基本ライブラリではスマートフォンゲームの開発を行う上で必須となる機能を機能単位で利用者が必要な物を取捨選択して導入できるようになっています。SDKの提供もしています。SDKに関するお問い合わせにつきましてはコチラをご覧ください。