Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Unity+Firebaseでソシャゲ版ワンナイト人狼を作ってみた

この記事はUnity #3 Advent Calendar 2020の25日目の記事です。

unityとfirebaseを駆使して初めてゲームを作ってみたのでその知見を共有する記事です。

こんにちは。virapture株式会社もぐめっとです。

DSC04588.JPG

最近富士山登ってきました。(気持ちだけ)
エスカレータでひょいひょい行けたのでいいところでした。

今日は12/30リリース予定(審査ちゃんと通ってくれれば)のワンナイト人狼オンラインというゲームを作ったので、その時の知見やfirebaseを使ってみた感想をツラツラと記述いたします。

Unity版Firebaseはトラップがまだまだ沢山ある

発展途上中なのか、firebaseのSDKに罠が多かったです。

いくつか書いたのがあるので良かったら私の罠の軌跡を見てみてください。

unity+firestore(v7.0.1)でChangeTypeを使うとandroidでcrushする
リリース前のトラップだったので結構上記には困りましたが、なんとかノラリクラリ回避できました。

Unity+Firestoreでenum変換とNullableな値の変換をする
そもそもUnityはnullable対応するのがC#8が入る2020.2からになります。なのでfirestore側もまだ対応してないようで、nullableを使おうとすると怒られるのでコンバータを頑張って書いてあげないと使えなかったりします。

unity 2020.1以降の環境下でfirebase on the android実機を動かす
androidにはなぜか癖がつよいfirebase君です。

その他トラップとしては下記のようなものもあります。

arrayRemove, unionはunityではサポートされてない!!!!!
ドキュメントをみるとこんな悲しい文字が。。。

// This is not yet supported in the Unity SDK

渋々設計を変えざるをえなかったのでみなさんお気をつけください。

v7.0.1までのSDKにはマルチバイト文字のバグがandroid限定にある!!!

7.0.0-7.0.1の環境だと、こちらのissueの通り、unicodeな文字列をandroid環境のfirestoreでparseしようとすると下記のエラーが出て認識してくれないバグがあります。

12-16 12:14:10.776 12841 12993 W System.err: java.lang.StringIndexOutOfBoundsException: offset=0 length=8 string.length()=4
12-16 12:14:10.776 12841 12993 W System.err:    at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
12-16 12:14:10.776 12841 12993 W System.err:    at com.unity3d.player.UnityPlayer.access$300(Unknown Source:0)
12-16 12:14:10.776 12841 12993 W System.err:    at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source:95)
12-16 12:14:10.776 12841 12993 W System.err:    at android.os.Handler.dispatchMessage(Handler.java:103)
12-16 12:14:10.776 12841 12993 W System.err:    at android.os.Looper.loop(Looper.java:214)
12-16 12:14:10.776 12841 12993 W System.err:    at com.unity3d.player.UnityPlayer$e.run(Unknown Source:20)

こちらはクリティカルなバグということで早急に7.0.2がリリースされたのでみなさんもすぐに上げましょう。

工夫した点

セキュリティールールが煩雑になるのでなるべくupdateを使わず、createだけでできるように工夫しました。
たとえば重要なところは直接書き換えるのではなくcloud functionを通してupdateさせるとかですね。

また、cloud functionが結構肝になるのでなるべくunit testを書きながら実装を進めていきました。

arrayRemove, unionが使えないのは致命的で、そのためにcloud functionを実装した部分もありますが、結果としてセキュリティ的にはあがったかなぁとおもったので良しとしています。

使ってみた感想

普通にアプリのときと同じよう基本機能は使えるので、問題なく実装できるかなと思います。

まだ罠があるところはありますが、大分ならされてきたとは思うので選択候補として使うのはありかと思っています。

ちなみにそもそもなんでPhotonじゃなくてFirebaseを選択したかという点ですが下記のような点で選択しました

  • unityとfirebaseの知見がないのであれば、もぐめっとが先駆者として溜めていこうと思った
  • firebaseならばゲーム以外にも知見を活かせる
  • firebase自体への知見がもともとあった
  • そもそもfirebase大好き

地雷は踏みまくりましたが、選択してよかったとは思います。

ただ、本当に地雷は多かったので作り終わった!!と思った後のデバッグ作業は結構時間をとられました。。。

2週間くらいはみなさんもテスト・修正期間はとるようにしましょう。

総評

firebaseはいいぞお〜。
今後もどんどん機能を拡充していきます!
課金もfirebaseでがんばります。

12/30にリリース予定なのでよかったらみなさんもワンナイト人狼遊んでみてくださいー!
twitterとかにもご連絡貰えれば個別に事前お試しテストもご案内いたしますー!
ぜひフィードバックなどお待ちしてます!

リリースされました。

オフライン版は既にあっていつでも遊ぶことができますのでよかったら年末年始に家族と一緒にどうぞ!
iOS
Android

mogmet
virapture株式会社CEO。アプリからインフラまでなんでもやります。firebase使ってサクッと作るのが好き。 ワンナイト人狼作ってます。 あとはこのへんみてください。 https://mogmet.com/ https://virapture.com/
https://virapture.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away