TowerOfMazeでUnity3DとOpenFeintを連携させたときのメモ-Android編。
Step1
Unity用のEclipseでの環境を整える。Indigoでもだいじょうぶ。
@ITのgreeの方の書かれた記事を見るか、もしくはUnityの公式ドキュメント(Integrate Eclipseなんちゃら)に従い、Eclipseでの環境を整える。
この段階では、単純に
・UnityPlayerActivity(2.3以上向けならProxyActivity)を継承したクラスを作成
・BuildされたTemp/ほにゃらら/assets/以下をEclipseプロジェクトのassetsにコピー
・Eclipseから実機を起動する(Unity上でのBuild and Runは使用しない)
を確認する。
なお、Temp以下はUnityでplatformをAndroidにして、一度ビルドしないと出現しないので注意。
Step2
次にOpenFentのSDKを参照できるようにする。jarでは提供されていない?ので、プロジェクトをインポートする
・OpenFeintのAndroid用SDKをダウンロードし、OpenFeintAPIのプロジェクトをimportする。
・プロジェクトを右クリックし、Androidを選んでis Libraryにチェックを入れる
(最初から入ってるかも)
・Step1で作成したプロジェクトを右クリックし、Configure Build Pathを選択
・左メニューからAndroidを選んでLibraryのAddを選択し、OpenFeint APIを追加する。
(UnityPlayerの環境を整えるのと同じやり方)
Step3
Eclipseでクラスを用意する。OpenFeintPluginなどとする。このクラスをUnity側から呼び出す形になる。メソッドはすべてstaticにする。最初はLaunchDashbordだけとかがいいでしょう。(OpenFeint側の公開メソッドはほとんどstaticで実装されている。)
Step4
Unity側でクラスを書く。Assets/Plugins/Android以下におくのが望ましい。
AndroidJavaClassを使用するので、もし同じソースでiOSなど別のPlatformでBuildする場合は当然エラーになるので、クラス全体を
#if UNITY_ANDROID
#endif
で括る。また、Unity上でPlayしたときに、スルーするように
Application.isEditor を使って分岐する。
以下Step3とStep4を繰り返し、Eclipse側でコードを追加し、それをUnity側で
AndroidJavaClassを使って呼び出す。
おまけ
OpenFeintで何かイベントが発生した場合に(ログインしたとか)なにかしたい場合は
自分でOpenFeintDelegateを継承したDelegateクラスを書き、
OpenFeint.initializeの第3引数にそのインスタンスを渡せばよい。
OpenFeint.initialize(currentActivity, settings, new MyOpenFeintDelegate());