FC2ブログ
 
■プロフィール

クリエイトウェーブ

Author:クリエイトウェーブ
開発における、諸々を書いていきたいなと思っています。
mail : info@createwave.jp

■最近の記事
■カテゴリー
■最近のコメント
■月別アーカイブ
■最近のトラックバック
■ブログ内検索

■RSSフィード
■リンク
FireBaseのUserIDじゃなく、UserTokenを使う
あけましておめでとうございます。
今年も、UnityとFireBaseガンガンやっていきます。

さて、早速ですが、UnityとFioreBaseのCloudFunctionでやりとりするときに、FioreBaseのUserIDを使うのがシンプルですが、UserTokenを使う手もあります。
トークンは、CloudFunction上でUserIDに変換され、トークンは一定時間で変化するのでセキュリティ的にもUserIDで直接やりとりするよりも強力です。

まずは、Unity側
-----------------------------------------------------------
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
user.TokenAsync(true).ContinueWith(task => {
 if (task.IsCanceled) {
   Debug.LogError("TokenAsync was canceled.");
   return;
 }

 if (task.IsFaulted) {
   Debug.LogError("TokenAsync encountered an error: " + task.Exception);
   return;
 }
 string token = task.Result;//ここでトークンを取得
});
-----------------------------------------------------------
こんな感じです。

次に、受け取ったトークンをUserIDに変換するCloudFunction側
-----------------------------------------------------------
admin.auth().verifyIdToken(token)
 .then(function (decodedToken) {
   fireBaseId = decodedToken.uid;//変換されたUserID
   return
 }).catch(function (error) {
   //エラー処理
});
-----------------------------------------------------------
こんな感じです。


カテゴリー:Unity&FireBase | TM(0) | CM(0)
cloud functionsでFireStore上の複数のドキュメントを読みこむ
あるコレクションに、ドキュメンとが複数あってscoreってフィールドに得点が、userIDってフィールド
にユーザーIDが並んでるとします。
仮にスコア100点の人をクエリで抽出して、抽出した該当userID使って、他の基本情報が書き込んである
コレクションからuserIDを使って、複数人のデータを抽出したい場合どうするんだと、ここ数日悩んで
おりました。
それこそ、10人だったり、100人だったりの可能性もある訳で・・・・

const ref = admin.fireStore.collection('コレクション名');
ref.where("score", "=", 100).get()
.then(querySnapshot => {
   for(let i= 0; i < querySnapshot.docs.length; i++)
   {
      const userId = querySnapshot.docs[i].data().userId;
      // ここでそれぞれDB読み込み?
   }
})
.catch(error => {
   console.log("DBの読み込みに失敗しました");
});

ってな感じで、async/await 使ったほうが良さそうとか思い デフォのV6エンジンだと使えないとかで
cloud functions上では、未だベータのNodeJSをV8エンジンにしてみたり
思考錯誤の連続・・・ 
でも、こういう場合の複数読み込みの命令はforeStoreに準備されてるようです。

その命令とは、
admin.fireStore.getAll

まず、クエリで、スコア100点の該当者を

ってな感じで書いておいて次の処理。
階層深くなると読みにくいので、私の場合、const me = this; で実行してるオブジェクトを参照させて
次のメソッドを呼び出してます。

jsは、こうでもしないとthisのスコープが、変化しまくるのでメソッドが特定出来ないので・・・・
me って変数は、DirectorのLingoで使ってた名残でなんとかく・・(懐かしい

次の処理は

という感じになります。

admin.fireStore.getAll が何故かマニュアルにも見当たらないし、英語音痴な私が海外のサイトとか
見てようやくここまでたどり着きました・・・数日かかった。

「...refArray」の「...」ってなに? と思ったらSpread構文というものらしい。知らなかった


カテゴリー:FireBase | TM(0) | CM(0)
スマートフォンのFireBase匿名ログインで毎回IDを変える方法
そんな使い方する人はいないと思いますが、FireBaseの匿名認証で毎回IDを変える方法です。

ご存知の方も多いと思いますが、FireBaseの匿名認証は、スマートフォンでログインする場合、毎回同じIDになります。
例え匿名認証してるアプリをアンインストールして、インストールし直したとしても同じIDになります。

対して、開発中のPCのUnityEditorだと毎回変わってしまうので、厄介だったりするのですが、前に作ったスマートフォン用カジュアルゲームにランキングをつけているんですが、どう考えても毎回ログインIDが変わってるという事象に遭遇しました。

プレイ本人の最高点を更新する形にしていたはずなのですが(つまり、1ユーザー1つのデータしかもたない)、なぜか毎回登録されて前にプレイした自分の点数が別人扱いになっている。。。 なぜじゃ・・FireBaseの仕様が変わったのかなと思ってたら違いました。

FirebaseAuth.DefaultInstance.SignOut();

この1行を実行してるせいだった・・・
FireBaseのRealTimeDBは、Unityとソケット接続で常時接続なんていう事をやれる仕組みなので、ランキング登録したあとは、
SignOut();
したほうがいいのかな。。。と、よく調べもせず書いてしまったのがうかつでした。

サインアウトは、FireBaseの接続をサインアウトするのではなく、ログイン関係含むFireBaseのシステムからサインアウトする(リセットする)って意味だったようです。

FirebaseAuth.DefaultInstance.SignOut();
を実行すると、前の情報はなくなってるので、新しい匿名IDが生成されます。
これで毎回匿名IDを変える事が可能。。。って使いみちあるのかな。

匿名IDは上記のようにサインアウトしない限り、アプリをアンインストールして再インストールしても変化しない為、匿名ID使ったガチャゲーだと、リセマラできないシステムになりますね・・・ と言っていたのですが、IDリセットボタンをつければ、ユーザーが毎回ダウンロード&インストールしなくてもリセマラ出来るシステムが出来上がりますね・・・・ わざわざそんな使い方する必要はないですが・・

カテゴリー:Unity&FireBase | TM(0) | CM(0)
PlayMakerとFlash Animation Toolset買ってみました
11月11日のみの1日限定半額セールで
PlayMakerとFlash Animation Toolset買ってみました。

PlayMakerは有名ですが、ビジュアルスクリプトってホントに便利なんですかね?
手伝いのプロジェクトでも使われてるのがいくつかあったので気になってたのでいい機会なので・・・

UnityとFlashの連携は前はUinSWF購入して使ってたのですが、取扱中止になってるしAnimation Toolsetなんとなく凄そうだったので・・・

UniSWFのときもそうですが、結局あまり使わない&Unity2018の新アニメツール(未だPreView版ですが)に慣れてきたのもあり、やっぱりあまり使わない気も・・・

ただ外にアニメ発注するときは、未だフラッシャーの方のほうが圧倒的に多いですし・・・連携できるなら
私自身はプログラマーなので、あまりアニメをいじるのは得意ではありません。

カテゴリー:Unity | TM(0) | CM(0)
AnimateCCのアニメをUnityに取り込む
AdobeからAnimateCCで作ったアニメを取り組む方法が
AnimateCCのアニメをUnityに取り込む
掲載されているんですが、上記の「テクスチャアトラスの作成」の項目以下になります。

テクスチャーアトラスとJsonのデータになるのですが、使うのにちょっと癖があるので、個人的なまとめです。
①1つのアニメしか組み込めない?(方法あるのかな?)
②マスクは使えない(マスク使った部分は無視されちゃうようです)
③WebGL書き出しには使えない(Shaderとかの関係の気はしますが。。。、まあWebに書き出すことはないからいいのですが、そのうち対応するのかな?)

Animateでアニメ作る人は多いと思うので(いわゆるフラッシャーですが)、もっと組み込みが簡単に使いやすくなってくれるとありがたい。。。

カテゴリー:Unity | TM(0) | CM(0)
前のページ 次のページ