##はじめに
初投稿です。こんにちは。
昨今ではクロスプラットフォームのゲームエンジンといえば Unity 一択で、
次点でどうにかUEが出てくる程度じゃないかと思います。
そんな中 cocos creator に手を出したのはいいものの、情報が少なく割と困ったので、備忘録がてら投稿します。
##したいこと
cocos creator で開発中のアプリで Firebase の Realtime Databaseにアクセスする。
##方法
cocos creator は Node.js を利用しているので基本的には npm を利用する。
ただし、この方法ではAndroid上では動作しなかった。(iOSやWeb上では問題ない)
仕方なくAndroid StudioでFirebase Databaseを導入し、それをJavaを通じて呼び出すという手法をとりました。
##npm install --save firebase
Cocos creator のプロジェクトフォルダでターミナル等を使って
npm install --save firebase
を実行する。
これについては以下の記事が非常に参考になりました。
Cocos Creator を使って Firebase Authentication を実装する
最初はうまくモジュールを読み込めていなかったのですが、Cocos Creator を再起動するとうまく読み込めたようです。
あとは Node.js でFirebase を利用するやり方で問題なく実行できます。
Firebase を JavaScript プロジェクトに追加する
##Android
Androidでは何故かモジュールを利用できません。Node.js の npm を利用しているという都合上、何か問題が起きているのかもしれないです。(把握できてない)
上記の記事では少なくとも Firebase Authentication については問題なく実行できていますが、自分の環境では Firebase Realtime Database は使用できなかったので仕方なく Java を直接利用することにしました。
まずはプロジェクトに Firebase を導入する必要があります。
Android プロジェクトに Firebase を追加する
そうして導入した Firebase Realtime Database を Java を通じて利用します。
cocos creator から javascript で Java を利用するには
jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)
を使用します。
How to Call Java methods using JavaScript on Android
具体的には org.cocos2dx.javascript に使いたい Java のパッケージを置き、それを javascript から呼び出すといった形です。最初は org.cocos2dx.javascript の場所がわからなかったので一応書いておくと、
/Project_Folder/build/jsb-default/frameworks/runtime-src/proj.android-studio/src/org/cocos2dx/javascript/
にあります。
そこに、
package org.cocos2dx.javascript;
import android.util.Log;
import com.google.firebase.database.FirebaseDatabase;
public class FirebaseWrapper {
private static FirebaseDatabase database=null;
public static void init(){
if(null==database){
database=FirebaseDatabase.getInstance();
Log.d("Firebase Wrapper","Firebase Initialized!");
}
}
}
みたいなものを適当にでっち上げました。
これを実行するには javascript 上で
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/FirebaseWrapper","init","()V")
を呼びます。
なお result=jsb.reflection.callStaticMethod()
は残念ながら引数、返り値ともに渡せるものが限られています。
具体的には、int, float, boolean, String しか渡せません。なので、配列などを渡すことはできません。一つずつ渡すなど何か工夫が必要です。
とはいえ一先ずこれで無事 Firebase Realtime Database にはアクセスできます。
##終わりに
今回、cocos creator を使って初めてアプリを作ったのですが、自分の技術不足もあり、正直とてもしんどかったです。
まだまだ情報不足の面が多く、基本的に英語か中国語の情報を漁るしかないので素人は手を出すべきでなかったと感じました。
ただそれゆえに情報が増えづらいといった面もあるので、未来の誰かか自分の為にもこの記事を投稿しておきます。
いろいろ勉強にはなりましたが次はたぶん素直に Unity を使うと思います。笑