フレンド申請に限らず、チームに招待する機能を作りたい。
申請ボタンを押したら即座に相手に通知が行って、承認か拒否を選べる機能が欲しい!
フレンドのデータベースには、Nifty Cloud Mobile Backend (NCMB)を利用する予定。
なので始めはNCMBを使った実装を考えたけれど、どうにも問題があった。
そこで最も良い方法を調べて、考えた。
結論から言うと、最後に書くPhotonChatを使うのが良さそう。
(まだ実際に使ったわけではないので、確定ではないのですが)
NCMBに新しく、フレンド申請クラスを追加してそれを監視する。
フレンド申請クラスには、申請先のユーザーID, 申請元のユーザーIDをデータとして入れるようにする。
新しくデータが追加された時に、自分に対する申請が無いかをチェックする事でフレンド申請の機能にする方法。
5秒に1度くらいのペースで新規データをチェックしないとリアルタイム性に欠ける。
データが追加された時にUnity側の関数を呼び出す機能があれば良いのだが、どうやらそれは無さそう。
もし、毎日100人がプレイしたとするとNCMBの無料枠1,000,000APIリクエストは
1,000,000(回) / 30 (日) / 100 (人) = 333 (回)
333 (回) × 5 (秒) / 60 (秒) = 27.75 (分)
となり、一人当たり一日28分以上プレイすると無料枠を超える事になる。
NCMBの無料枠を超えると、5万円 / 月 かかるのでこんなオーバーの仕方ではもったいなさすぎる。
NCMBの機能を使って、特定の人にフレンド申請のプッシュ通知を送る。
プッシュ通知とはiPhoneとかAndroidでゲームを起動してなくても来る通知の事。
そもそもプッシュ通知の本来の使い方と違う気がする。
プッシュ通知を利用する場合、NCMBではiPhoneかAndroidで実機ビルドをする必要がある。(エディタ上では使えない)
また、iOSでは確かAppleDeveloperの有料アカウントが必要など非常に面倒事が多い。
一番の問題はエディタ上で使えない為、デバッグが大変すぎるという事。
Photon Unity Networking (PUN) でRPCを利用する方法。
常に個人用のルームに入室している必要があり、無駄。
複数人同時に申請を送る場合、ルームがわけわからなくなる。
申請をする為だけに人のルームに勝手にはいる事になり、何か違う。
実装がなかなかに面倒くさい。
上記同様PUNを利用するが、こちらはチーム申請の際の話。
既にフレンドリストが存在していれば、
常にFindFriend関数を更新する必要がある。
非常に無駄。
実装が大変。
最近サービスが充実してきたPlayFabというサービスがあるらしい。
日本ではまだ全然広まっていないが、マイクラなど有名なゲームが採用しているようだ。
機能は、NCMBのようにmBaaSだと思われる。
NCMBとの違いは、よりゲームに特化した機能が多い事だ。
機能が豊富なのでNCMBの問題を解決できるかと期待したが、
『普通そういう使い方はしません。
今後のアップデートでそういう事が出来るようになる可能性が高いけど、今はまだNCMBと同じ方法でしか出来ないよ』
と書かれていて残念。
今回の件に関してはNCMB同様の問題で解決できそうにない。
また、まだ日本語のドキュメントが皆無と言ってい良い。
英語読むの大変。
でもNCMBやめてデータベースとして利用したいと思えるほど便利そうだった。
NCMBに似たサービスでもう一つ、Firebaseなるものがあるようだ。
Firebaseでは招待の機能があってそれを使えば実現できる可能性がある。
Firebaseはそれなりにサーバーサイドの知識が要りそう。
Unityとの連携に時間的コストがかかりそうだったから後回しにした。
現状、次のPhoton Chatでの実装の方が楽そうだったのでそれ以上は調べていない。
PlayFabの質問ページで僕と同じ事を考えている人がいた。
その答えは、「無理だから、ExitGamesとか使ってね。」
という事だった。
ExitGamesってなんだ?ってなって、調べたらPhotonだった。
「だから無理だって!!」
と思ったが調べるとPhotonChatなるものがあるらしい。
Photon Chatを使えば楽にリアルタイムでテキストデータのやり取りが出来るらしい。
確かに、フレンド申請は単純な文字のやり取りにすぎない。
そんなに難しい話じゃないやんけ!
チームの場合も同様。
という事でこれから実装していこうと思います。
(絶対一筋縄じゃいかない)
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント