なるこるな - かけだし個人アプリ/ゲーム開発者ブログ

自作ゲーム/アプリの宣伝を兼ねた個人Unity開発者のブログです

位置情報ゲーム制作日誌その2:Firebaseの匿名ログインを実装しよう

今回は匿名ログインを実装し、アカウント作成と同時にユーザー情報としてアカウント作成日時と初期レベルをFirebaseDatabaseに保存するところまでを書いてみようと思います。

全てネットで調べたことですので目新しいことは何もありませんが、他のサイトなどを見ても分からなかったという方や、Firebaseは初めてという方のお役に立てれば幸いです。

Playerクラスを作成

まずはアカウント作成時にユーザー情報を保存するためのPlayerクラスを作成します。

using System;

public class Player {

    public string signUpDatetime;
    public int level;

    public Player(int level)
    {
        this.signUpDatetime = DateTime.Now.ToString("yyyy年MM月dd日HH時mm分ss秒");
        this.level = level;
    }
}

AuthManagerを作成

匿名ログインを行うAuthManagerクラスを作成します。作成後は適当なエンプティオブジェクトにアタッチしてください。

using UnityEngine;
using Firebase.Auth;

public class AuthManager : MonoBehaviour {

    FirebaseAuth auth;
    public static FirebaseUser user;

    private void Awake() {
        auth = FirebaseAuth.DefaultInstance;
    }

    void Start () {            
        SignUpAnonymousUser();
    }

    public void SignUpAnonymousUser()
    {
        auth.SignInAnonymouslyAsync().ContinueWith(task => {
            if (task.IsCanceled || task.IsFaulted) {
                Debug.LogError("ログインエラー");
                return;
            }
            else if (task.IsCompleted) {
                FirebaseUser newUser = task.Result;
                Player player = new Player(1); // 初期レベルを1とする
                DatabaseManager.sharedInstance.CreateNewPlayer(player, newUser.UserId); // DatabaseにPlayer情報を保存
            }
        });
    }

}

DatabaseManagerクラスを作成

FirebaseDatabaseと情報をやりとりするためのDatabaseManagerクラスを作成します。こちらも作成後は適当なエンプティオブジェクトにアタッチしてください。

using UnityEngine;
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;

public class DatabaseManager : MonoBehaviour {

    public static DatabaseManager sharedInstance = null;
    private static DatabaseReference baseRef = FirebaseDatabase.DefaultInstance.RootReference;

    void Awake () {
		if(sharedInstance == null)
        {
            sharedInstance = this;
        } else if (sharedInstance != this)
        {
            Destroy(gameObject);
        }
        DontDestroyOnLoad(gameObject);

        FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("https://xxxxxxxxxxxx.firebaseio.com/"); // xxxxxxxxxxxxの部分は自身の環境に合わせてください
    }

    public void CreateNewPlayer(Player player, string uid)  {
        string playerJSON = JsonUtility.ToJson(player);
        baseRef.Child("Players").Child(uid).SetRawJsonValueAsync(playerJSON);
    }
}

https://xxxxxxxxxxxx.firebaseio.com/」はFirebaseコンソールで下の画像部分にありますので、自身のURLに変更してください。
f:id:nakorun:20180324214556p:plain

アクセスルールを変更

FirebaseDatabaseのアクセス権限を以下のように変更します。
f:id:nakorun:20180324215015p:plain
リリースするときはもっと細かく設定する必要がありますが今はこれで構いません。念の為、使用しないときは元の状態に戻しておきましょう。

匿名ログインを有効にする

匿名ログインするためには機能を有効化する必要がありますので、以下を参考に有効化してください。
f:id:nakorun:20180324220026p:plain
カーソルを合わせると赤丸部分に編集ボタンが表示されますのでクリックしてください。
f:id:nakorun:20180324220037p:plain
有効化すれば匿名ログインが利用可能となります。

実機で確認

Auth機能はUnityエディタ上では(多分)利用できないため実機で確認します。(実機での確認方法はまた別の記事でご紹介したいと思います。)
まだ何もありませんが、アプリを起動するとアカウントが作成され、データベースにはアカウント作成日時と初期レベル1が保存されます。
f:id:nakorun:20180324230805p:plain
f:id:nakorun:20180324232730p:plain

次回予告

次回は簡単に実機で確認する方法をご紹介する予定です。いや、その前にデータベースからのデータ取得が先かも。
とりあえずアカウント作成やデータベースへの保存はできるようになりましたがまだまだ分からないことだらけです。UnityとFirebaseを扱った良い本でもあればいいのですが、なぜかFirebaseの本自体がかなり少ない。。。

位置情報ゲーム制作日誌その1:UnityプロジェクトにFirebaseSDKを組み込もう

ようやく次にどんなゲームを作るかがかたまってきたので、作りながらややこしい部分などはブログに残していきたいと思います。

ということでまずは毎回やり方を忘れがちなUnityプロジェクトとFirebaseの連携を記録していきます。

ちなみに作る予定のゲームはまたまた位置情報ゲームです。と言ってもポケモンGO的なものではありません。ARも取り入れる余地は残して開発しますがどうなることやら。

UnityプロジェクトにFirebaseSDKを組み込もう

Firebaseプロジェクトの作成

Googleアカウントを準備し、以下のページからFirebaseプロジェクトを追加します。

https://console.firebase.google.com/u/0/

f:id:nakorun:20180324132716p:plain

初めての場合は間に何かステップがあったかも知れませんが、その場合はなんとかして上の画像が表示されるページに辿り着いてください。

「プロジェクトを追加」をクリックすると以下の画面が表示されます。

f:id:nakorun:20180324132929p:plain

適当なプロジェクト名を入力後、「プロジェクトを作成」をクリックしてください。しばらくすると以下のメッセージが表示されます。

f:id:nakorun:20180324133026p:plain

「次へ」をクリックしてください。

f:id:nakorun:20180324133132p:plain

今回はAndroidアプリに追加しますが、iOSでも特にやり方は変わらないと思います。

f:id:nakorun:20180324133336p:plain

適当なパッケージ名を入力し、「アプリの登録」をクリックしてください。なお、ここで入力したパッケージ名はUnityエディターで以下の「Bundle Identifier」に入力する必要があります。

f:id:nakorun:20180324133502p:plain

「アプリの登録」をクリックすると以下の画面になります。

f:id:nakorun:20180324133721p:plain

google-services.json」をダウンロード後、「続行」をクリックしてください。

f:id:nakorun:20180324133859p:plain

上記の画面が表示されますが、気にせず下の方にある「終了」をクリックすれば完了です。

Firebase Unity SDKのダウンロード

SDKを以下のページからダウンロードしましょう。赤枠で囲ったリンクから直接ダウンロードできます。

Adding Firebase to your Unity Project  |  Firebase

f:id:nakorun:20180324132203p:plain

ダウンロードしたファイルは解凍しておいてください。

google-service.json」をUnityプロジェクトに追加

まずは「google-services.json」ファイルをUnityエディタに追加します。(自分の環境では先にSDKを入れると何故かエラーが出ます。)Unityエディタ上のAssetsフォルダ上で右クリックし、「Import New Asset...」を選択して、「google-services.json」ファイルをインポートしてください。

Firebase Unity SDKをUnityプロジェクトに追加

続いてSDKを追加します。Unityエディタ上部にあるメニューから「Assets > Import Package > Custome Package...」を選択し、「FirebaseAuth.unitypackage」と「FirebaseDatabase.unitypackage」をそれぞれインポートしてください。

FirebaseAuth.unitypackage:様々なログイン方法を簡単に実装できる

FirebaseDatabase.unitypackage:FirebaseDatabaseとデータを簡単にやりとりできる。

次回予告

今回でFirebaseを利用する準備が完了しましたので、次回は匿名ログインとFirebaseDatabaseにユーザー情報を保存するところまでをやりたいと思います。

何か質問があればコメント欄にてお願いします。と言っても分からないことの方が多いので期待しないように。。。

 

 

次はAR対応ゲームを作ろうか

作りっぱなしで大した宣伝もせず放置状態ですが、3つめのアプリはAR対応ゲーム(もしくはアプリ)にしようかと考え中です。

 

先月発表されたAppleのARkit1.5では垂直方向の壁を認識できたり、四角形以外の形の平面を認識できたりとかなり進化している様子。

ARKit - Apple Developer

 

具体的なアイデアはないですが、競争相手が少ないうちに挑戦しておきたいところ。子どもがいるので子ども向けのゲームか教育関連のアプリでまずは考えていくつもりです。

 

とは言うもののARkit対応端末もなく、Macも5年以上前に購入したバッテリー絶賛膨張中のMacbookAirしかないのでまずはそこをなんとかしないと。(最悪Macはビルドするだけなのでこれでも大丈夫ですが。。。)

 

実機確認さえできればいいので中古のiPhone6sあたりを購入しようかな。今ならバッテリー交換も安いし。

 

それよりも開発の参考になる資料やサイトが少なそうなのが一番の問題か。いつになったら公式ドキュメントをすんなり理解できるようになるのだろう。実はちゃんと読めば理解できるように作られているんだろうか。

 

----------------------------------------------------------------------------------

今日から記事の最後でおすすめの漫画を紹介することにしました。特に意味はありません。こういうのが好きなやつなんだなぁと親近感を感じてもらおうという多少の下心がある程度です。

 

それでは今日のおすすめ漫画はこちら(アフィリンクじゃないからご安心を!)

恋は光【期間限定無料】-1-ヤングジャンプコミックスDIGITAL-秋★枝-

 

2018年3月5日までは1,2巻が無料のようですので何も考えずぜひ読んでいただきたいです。(3月6日以降にこの記事をご覧になった場合はリンクがきれているかもしれません。)

全7巻ですでに完結済みですし、納得のいく結末となっていますので安心して読めると思います。

 

読んだ方は3人の女性キャラの誰推しかぜひコメント欄で教えてください。ちなみに僕は北代推しです。

 

ではまた次の記事で。

子供向けのタスク管理ToDoアプリをリリースしました

play.google.com

小学一年生のわが子に使ってほしくて開発したアプリです。小さい子どもでも自分で今日や明日にすることをタスクとして登録できるよう、複雑な機能は省きました。

 

レベル上げやたからものコレクションを楽しみながら、子ども自身でタスク管理を覚えていってくれるのではないかと期待しています。いわゆるゲーミフィケーションというやつです(多分)。

 

最初はレベルシステムのみでしたが、いまいち子どもの食いつきが悪かったため、たからものコレクションシステムをいれたところ、なかなか楽しんでくれているようです。

 

子ども用に作ったとはいえ大人でもじゅうぶん実用的だと思いますので、ぜひ親子で楽しんでいただければと思います。

 

 

開発時間は企画含めて約50時間ほど。もちろんUnityで作っています。他の方からのフィードバックがあればどんどん改善していきたいところですが、当分なさそうなのでまた次のアプリを開発しようかと。というかアプリの宣伝って一体どうすればいいんだろうか・・・。

二記事目にして方針転換

Unityの使い方などを書こうと思っていたものの、良く考えたら全て本やネットに書いてあったことをやっていただけなので、あらためて書くほどのことは何もありませんでした。

 

ということで、アプリやゲームを開発する上で役に立った本やネット記事を紹介することにします。

その他の内容もあまりジャンル問わずに気楽にやっていこうかなとも思ったり。

 

ちなみに現在は二つ目のアプリが公開待ちの状態です。ファミリー向けなので審査が厳しかったりするのだろうか。

 

 

Unity初心者ですが、位置情報を利用したゲームをリリースしてみました

Unityを勉強し始めてからけっこう経ちますが、環境も落ち着き、ようやく一本目のゲームをリリースすることができました。

 

play.google.com

 

どんなゲームかというと上の説明の通りなのですが、手に入れた卵が一定距離移動すると孵化するというどこかで聞いたことがあるようなシステムです。

 

某GOと違うところは徒歩だけでなく、車や電車での移動もカウントされること。普段まったく歩かない自分も卵を孵化させたいという強い(?)思いからこのゲームの制作を開始しました。

 

そしてゲームは完成し、私も卵を孵化させられるようになりました。ポケモンはでてきませんけどね。

 

単純なゲームというか、ほとんど操作することがない、放置ゲより放置ゲーなゲームですが、どうぶつが増えてくると森がにぎやかになり、画面をみているだけで楽しいのです。

 

ちなみに製作期間は約1ヶ月ほど。毎日仕事が終わって家に帰ってからと休日に少しずつ作っていました。なんか思ってたのと違うゲームが出来上がりましたが、制作開始時に決まっていたのは「移動して卵を孵化させる」という点のみで、企画も仕様も無いから当然といえば当然か。

 

このブログではこのゲームを制作することで得た知識などを、同じく初心者のUnity使いたちのためにまとめる予定です。さしあたっては以下のところかと。

 

・Unityで位置情報を取得し、2地点間の距離を計算する方法

・UnityでFirebaseを利用する方法

・UnityAdsを実装する方法

 

いつ書くかは決めていませんが、備忘も兼ねているので忘れない内に書いておきたいところ。

 

最後になりましたが、対象読者は上記のゲームを見て少しでも「すごい」と思うレベルの方。「ショボっ!」と思った方は何も言わずに帰るが吉です。(アドバイスは大歓迎。)

 

ではでは。