Unityに超簡単にサーバーの機能(ランキング等)を追加する話

こんちゃ!洋梨🍐です。

以前「ランキング機能をNode.js+MySQLで実装する方法」こんな記事を書いたのですがこれだとゲームにちょこっとつけたいランキング機能なのにめんどくさい!という方に是非紹介したいのが FireBase RealTime DataBase です!

では、Unityにサーバーの機能を追加するのがいかに簡単かを解説していこうと思います。

FireBaseとは

まずFireBaseって何?という方に説明しようと思いましたがこの辺の記事は調べれば沢山出てくるので割愛します👼

簡単に言うとGoogleが作った非常に簡単に使えるサーバーです。しかも無料!

※有料プランもあります

FireBaseに登録・設定

登録

まず firebase.google.com でアカウントを作成・登録します。

その後プロジェクトを作成します。


アプリを追加

プロジェクトの設定 → 全般 からUnityアプリを追加します。

とりあえず動かしたいならここは特に何も考えなくて大丈夫
でたらめでおっけい()

すると設定ファイルがダウンロードできると思うのでそのファイルをUnityのAssetsフォルダーに追加します。(実際Assetsという決まりはない)

UnityにFireBaseを追加

SDKをダウンロード

ここ からFireBase Unity SDKをダウンロードします。

ここからダウンロードできるよ

ダウンロードしてきたzipを解凍しておきます。

SDKをUnityに取り込む

unityの「import Package」から先ほど弾ロードしてきたパッケージを取り込みます。

今回はデーターベースに接続するので「FirebaseDatabase.unitypackage」を取り込みます。

※dotnet4、3フォルダーがありますが新しいUnityバージョンでは4を選べば大丈夫です。


動かしてみる

こんだけで主な設定は終了です。

え、これだけ?って思うかもしれないし思わないかもしてませんが、これで終わりです。

おそらくこの段階でデータベースの様子(DataBase → Realtime Database)を確認してみると
このように何も入っていないと思います。

送信してみる

ではやってみます。今回はサーバーに[ name : 山田太郎 ]を保存してみます。

// main.cs

public class main : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        SetData();
    }

    async void SetData()
    {
        DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;
        await reference.Child("name").SetValueAsync("山田太郎");
        Debug.Log("OK");
    }
}

このようなスクリプトを作成、GameObjectにアタッチします。

そして実行し、コンソールに「OK」と表示されればサーバーにデーターの送信完了です。

(たぶん)成功だよ!

では、Firebaseの方で確認してみます。

このようにデーターが入ってれば成功です!

これでもうサーバーにデーターを保存できるようになったはずです。簡単ですね!

取得してみる

「いや、その保存した名前を取得できないと意味ないやん!」

そのとおりです。ではやってみましょう👼

public class main : MonoBehaviour
{
    void Start()
    {
        GetData();
    }

    async void GetData()
    {
        DatabaseReference reference = FirebaseDatabase.DefaultInstance.RootReference;
        var snap = await reference.Child("name").GetValueAsync();
        Debug.Log("Name is " + snap.Value);
    }
}

これでオッケーです。コンソールに[山田太郎]が表示されればデーターが取得出来ていて取得できているということです()

まとめ

FireBase便利ですね!

また、今度はこれを使って組み込んでみる例を紹介できたらしようとおもいます。