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