前回、
「(作成アクション) Umbrella_GoogleSheets_Action 」の続編になります。
「Umbrella」では、おまけ、ということですが、Googleのスプレッドシートを利用しての、
オンラインランキングの機能があり、それをPlayMakerから使用するためのカスタム
アクションになります。
間を開けると、色々忘れてしまうであろうことから、流れで作っておくことにしました()
「Umbrella」本体、そのデータセーブのPMアクション等のことについての、前回の記事
「(作成アクション) Umbrella_GoogleSheets_Action 」を、一読の上お読みください。
プレイヤーは固有の[ userID ] で識別され、「名前」と「スコア」をスプレッドシートへ送信し
記録されます。同時に、設定した順位内のリスト(名前、スコア)を、取得します。
「Umbrella」付属のデモシーン参照。
オンラインランキングのシステムは、他にも色々あるようですが、 「Umbrella」もシンプル、
簡潔で使いやすいんじゃないかなぁ。ゲーム内に取り込んで表示したいというなら特に。
既に「Umbrella」をインポートしてある状態のプロジェクトに、配布パッケージを
インポートします。
(注、 「Umbrella」は当環境で、unity2018.2.6f1では動作せず、2019.3.3f1では動きました。
それに伴い、PlayMaker も、バージョン 1.9.0.p20 に更新しています。)
Umbrella_GSRanking_Action_v1.1
更新履歴
2020/03/31 v1.1 公開
----------------------------------------------------------
配布パッケージをインポートします。(Projectにドロップで可)
すると[PlayMaker Custom Actions] 内に [@sakusei] フォルダができ、以下の5つの
アクションが追加されます。
注) v1.1は@nome フォルダとサンプルシーンも入っています。
アクションブラウザには、カテゴリ 「@sakusei」 が作られ、中に2つのアクションが
選択可能な状態で並んでいると思います。(図では以前のものも入ってます)
(カテゴリは、スクリプト内の
[ActionCategory] で変更できます)
[ Umbrella GS Ranking_write ] スコアを書き込んで、設定した順位のリストを取得します。
[ Umbrella GS Ranking_read ] 設定した順位のリストを取得します。
----------------------------------------------------------
Umbrella の RankingManeger をシーン内に置き、
[ RankingSettings ] に
スプレッドシート側で設定した、「Rankingスクリプト」 の 公開URLと、使用する
シート名( RankingName )を入力します。シート名のシートが存在しなければ新たに作られます。
( RankingNumber ) は、何位までを取得するかの設定です。
( Order By ) をDESCにすると、
降順 (数字の大きい順)に取得するということになります。
*ASCなら 昇順 (数字の小さい順)になります。タイムアタックのような場合は、こちらを
選択することになるでしょう。
( Size ) Umbrella では一つの[ RankingSettings ]で複数シートを設定、使い分けもできますが
このカスタムアクションでは、一つのシートの使用を想定しています。
シーン内ではMainCamera に PlayMaker のFSM(状態遷移を)をつけています。
----------------------------------------------------------
アクションを一つづつ使用してみます。
[ Umbrella GS Ranking_write ]
シートにスコアを送信、書き込みます。
送信時に固有の[ userID ] が作成され、PlayerPrefs に保存されます。
以後、送信するたびに、新しいデータが上書きされます。
この値で、実行してみます。
Sousin_name 、 Sousin_score が送信値です。
NameArray ScoreArray は取得した値を個別に格納する配列 ( Stringタイプ )。
他は、見たままですね。全部を設定する必要はありません。
注( 更新版はFinishEvent が選択できるように、なっています )
値を格納するために用意した変数はこんなところです。
実行時
変数設定で、インスペクタ表示をチェックしていると、このように結果が表示されます。
設定した10位までデータが取得できています。
プレイヤー順位が設定順以外(この場合11位以下)のときは、Zibun_zyuni (int プレイヤー順位)
は -1 になります。
----------------------------------------------------------
シート上では、この様になっています。データはシート上の表示では自動でソートされません。
今回の「マリコ」以外がスコア順に並んでいるのは、シート上でフィルタを使ったソートの
操作をしたからです。また、設定順以外の、データが自動で削除されるということもありません。
ここらへんを、自動でやりたければ、スプレッドシート側で処理のスクリプトを設定して、定時に
自動実行させたりすることは可能のようです。
----------------------------------------------------------
[ Umbrella GS Ranking_read ]
もう一つのアクションです。
といっても、スコアを送信せずに、リストを読み込むだけです。結果は、先に上げたものと
同じになります。
Userid の削除は
前回の Umbrella_GoogleSheets_Action に含まれている
[Umbrella_User id_sakuzo] で行えます。
通信エラー時はアクションはスルーされ、ステートが止まることはありません。
エラー通知の工夫など、前回記事、「(作成アクション) Umbrella_GoogleSheets_Action 」
を御覧ください。
----------------------------------
ランキングなので、具体的な表示までした方がいいなと作ったサンプルシーンの解説は
次の記事にしたいと思います。
特に、同一 useridであれば送信したスコアがシート上の値を下回っていた場合でも更新して
しまうことへの対処など。