2020年3月30日月曜日

(作成アクション) Umbrella_GoogleSheets_オンライン_ランキングシステム

前回、「(作成アクション) 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であれば送信したスコアがシート上の値を下回っていた場合でも更新して
しまうことへの対処など。

0 件のコメント:

コメントを投稿