FC2ブログ
 
■プロフィール

クリエイトウェーブ

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

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

■RSSフィード
■リンク
FireBaseの匿名認証のIDが、インストール毎に変わるようになったのかな?
FireBaseのUserIDじゃなく、UserTokenを使う
で書きましたし、ちょっと検索すると同じ事かいてるのにひっかかると思いますが、FioreBaseの匿名認証はアプリをアンインストールして、インストールし直すと同じIDになってました。

実験もしましたし、FireBaseIDでアプリ管理していたらガチャゲー作ってもリセマラ出来ないなとか言っていたのですが、仕様変わったのかな?

firebase_unity_sdk_5.4.3から、SDKの内容が「dotnet3」フォルダと「dotnet4」フォルダに分かれたので「dotnet4」にしてみたんですが
インストールするたびに、匿名IDが変化するようになってしまいました。

アンインストールしてインストールしなおさないと変わらないので、別に問題ないのですが、仕様かわったのかな?とちょっと気になってます。「dotnet3」のSDKでも同じなのかな?

とりあえず「dotnet4」SDKの方を使おうと思いますが

カテゴリー:Unity&FireBase | TM(0) | CM(0)
FireBaseはPHPとMySQLの代替になるか
去年の4月から約9ヶ月FireBaseの研究&仕事をやってきました。

自分は、SNSゲーム(いわゆるガチャゲー)を担当するときは、PHP(フレームワークはCodeIgniter)とMySQLで仕組みを作ってきました。 

たまにあの作品はサーバープログラムはRubyらしいとか、あの有名な会社はパイソンでやってるとか聞きますが、ゲーム業界全体で考えれば、まだまだPHPとMySQLの組み合わせは多いと思われます。

これをFireBaseでやることは可能かという話・・・

結論先にいうと、もうFireBaseでいいのでは? と思ってきてます。
PHPにあたるサーバーサイドプログラムは、CloudFunction(言語はNodeJS)、MySQLにあたるDBはFireStore(RealTimeDB併用でもいいです)の組み合わせになるのですが、UnityでもWebアプリでも十分使いものになります。

それぞれFireBaseで作るメリットとデメリット考えると

●メリット
・とにかく環境構築が非常に楽
 gmailアカウント一つで、環境が作れます。サーバープログラム書いてデプロイして実行するだけ。

・サーバー環境構築どころかSSL通信やスケーリング含めたインフラ構築の必要がない(全部Google任せ) 
もちろんSSL代もかからない

・テスト環境は、ほぼ費用がかからない(有料版に切り替えても、本サービス開始にならないとまず無料枠を超えることはない)

・ログ書き出しの仕組みとかも便利(SNSゲームとかだと、ログ書き出しの仕組みはちゃんと考えないと、サーバーのHDパンクしてサーバー止まったりするのですが)そういうのも考えなくていい

・総合的に運用費用が非常に安い。
本運用でも通常のシステムより安いと思われる。(※海外で、すごい非効率な組み方してすごい費用になってしまったニュースもあったので、そこは気をつける点・・・)

●デメリット
・良くも悪くも独特
 PHPとMySQLで作っておけば、契約してたクラウド会社がサービスやめても、他のクラウドサービスに乗り換えるだけですがFireBaseはGoogleはサービス辞めるとやりようがないです。。。。
 ただCloudFunctionやFireStoreは、FireBaseというよりGoogleCloudPlatformの仕組みで、サービスが終わるとかは、まずないと思われますが。。。

・エンジニアを探しにくい
 上記の独特にも繋がることですが、普通にサーバーエンジニア募集した場合、PHPやRuby経験者は来ると思いますが、
 NodeJSは中々見つからないでしょう・・
 未だNodeJSはFireBase以外でも使われてる訳で可能性もありますが、DBのほうはMySQL経験者と違ってFireStoreは、Google特有と思われます。

・言語がNodeJS(JavaScript)である(これは、人によりけりで絶対ではありませんが)
 JavaScriptは、プロトタイプ言語といって他言語(だいたいの場合クラス言語)とちがって良くも悪くも癖がつよいです。
 プログラマーでも、JavaScripだけは苦手というプログラマーは意外に多いのです。
 私は、JavaScriptは得意ですが、好きか?と聞かれるとNoと言ってしまいますw・・・

 ちなみにjavascript苦手な人の為にTypeScript(コンパイル結果がjavaScriptになるクラス言語)環境も準備されてます。
 クラス言語しかやったことない人は、TypeScriptのほうがやりやすいでしょう。
 まだベータですが、パイソンでも書けるようになったようです。

FireStoreはまだベータ扱いになってる面はありますが、有料版サービスにも入ってますし、既に実用サービスでも使われてる会社様もあります。
Cronスケジュールや、バックアップの仕組みなども整って先が楽しみなサービスです。
一昨年後半にベータに入ってるので、そろそろベータが取れるのではないかと思っているのですが、やっぱりベータマーク取れたほうが気持ちはいいですよね。

SNSゲームは、ある意味行き詰まってる面がありますが、こういった新しいシステムを導入して、かかる費用や運営効率など見直す時期に来てるのかもしれません。

カテゴリー:FireBase | TM(0) | CM(0)
Flash Animation Toolset の使い方
去年のUnityのAssetStore半額セールで買った「Flash Animation Toolset」
C#でgotoAndPlayやStopも出来るしマスクも使える、期待通りの優れものAssetでしたので紹介したいと思います。
これは使えそう!!ただ日本では情報が少ない(マニュアルの英語ページもわかりやすいのですけど、やっぱり敷居がありますよね・・)

サンプルに使うAnimateファイル(FlashProファイル)は、ボーンを使ったFlashアニメ
ボーン素材なのでパーツが分解されている。
Flash1.png

それをボーンを使ってタイムラインを起こしてあります。
Flash2.png
素材は、クリエータ「りんこ」さんにに作成して頂きました。

こういう動きをします。こういうのをすぐ作っちゃうのはクリエータさんって凄いですよね・・・ 
[広告] VPS


さて本題、これを「Flash Animation Toolset」を使ってUnityに取り込んでみます。
当然ですが、「Flash Animation Toolset」をUnityにインポートする必要があります。自分は購入しましたが無料の試用版もあります。
Flashファイルは、Assetフォルダ以下の適当なところに置きます。今回はAssets/Scenesに置きました。
Flash4.png

まず、Unityで使うアニメは、ルートシーンのタイムラインではなく、ムービークリップ単位になってる必要があります。
そして、このムービークリップにリンケージをつけます。今回は「test_anime」とリンケージをつけました。
後でラベル名で、gotoAndPlayやStopで制御したい場合は、ムービークリップのタイムラインにラベル名をつけておきましょう。
Flah3.png

次にAnimate上の「コマンド」メニューから「コマンドの実行」を行います。
Flash5.png

コマンドファイルを聞いてきますので、Unityにインポートされてるコマンドファイルを指定してあげましょう。
「Flash Animation Toolset」を普通にインポートしていれば
Asset/FlashTools/FlashExport/FlashExport.jsfl がコマンドファイルになります。

コマンドの実行が終了するとFlaファイルの隣に「Flaファイル名_export」フォルダが出来上がり、中にUnity用のファイルが出来上がります。
Flash6.png

フォルダの中には、Unity用のムービークリップアニメファイルがあります。
Flash8.png

出来上がったファイルの中のPrefabファイル(青い立方体マーク)をHierarchyに投げ込みましょう。
Flah9.png
見事にムービークリップがUnityに・・・

Flash10.png
再生すると、ちゃんと動きます。

ついでに、ちょっとC#で制御してみましょう。
以下のような「SwfTest.cs」を作ります。


MainカメラなりCreateEmptyなりを実行して作るかなりで、「SwfTest.cs」を適当なGameObjectにはりつけます。
public SwfClip SwfClip;
public SwfClipController SwfClipController;
は、Hierarchyから先程投げ込んだPrefabを登録します。
Flash11.png

実行すると、C#から制御できるのが確認できます。

※追記2019年1月20日
Unity2018.3で動かないという事なので調べてみました。
自分はUnityのEditorはJetBrainのRiderを使っているのですが、
Assets/FlashTools/Scripts\Editor/FTEditorフォルダの中のSwfEditorUtils.csの217行目のZlibStreamメソッドの第3引数の指定の所が赤くなっている・・・・
動かない

調べてみると、
Assets/FlashTools/Plugins\Editorフォルダの中のIonic.Zip.Unity.dllファイルからCompressionLevelプロパティの値をとりそこなってるように見える。。。Ionic.Zip.Unity.dllがうまく読み込めていないって事なんでしょうか
ZlibStreamメソッドの第3引数はなんだろうとしらべたら、ブーリアン値だったので、とりあえずtrue入れてみました。
修正

そしたら動いた。問題ないように見えるけどfalseにしたらどうなるんだろう・・・・
超優秀なAssetですし、そのうち修正されると思いますが、とりあえずこれで対処・・・・

UniSwfとかは、無理やりFlashを使ってる感があったし、結局あまり使わなかったのですが、こちらは自然とUnityのプレファブとして使える感があって抵抗がない。。。 のでいいんですよね。

カテゴリー:Unity | TM(0) | CM(0)
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)
前のページ 次のページ