見出し画像

【プリチャン】ARコーデ管理アプリ作ってみた その6 ~さよならスプレ編~

この記事は #プリッカソン Advent Calendar 2019 の12日目の記事です。

はじめに

自作したアイテム管理アプリを使用し始めてからおよそ1年が経過しました。時が流れるのが早すぎるぷり…

さて、今まではアイテムデータと所持数をGoogle スプレッドシート(以下、スプレ)でひとまとめにして管理していましたが、そろそろ新弾が出るたびにスプレを更新するのも面倒になってきたのと、どうしてもスプレ+GASの構成だとレスポンスが悪いのでスプレを卒業してアイテムデータをPrismDBから取得するように変更します。また、PrismDBには当然個人の所持情報は入れられないので所持情報に関しては別途Firebaseで管理することにします。

PrismDBに関しては前回の記事で簡単に触れています。

アイテムデータ

まずPrismDBからアイテム情報を取得します。

これは現在筐体から排出されるコーデの一覧を取得するSPARQLクエリです。(正直SRARQLをほとんど理解していないので無駄があるかもだし悪い記述をしているかもしれない)

DEFINE sql:select-option "order"
PREFIX prism: <https://prismdb.takanakahiko.me/prism-schema.ttl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT ?id ?rarity ?name ?category ?image_num ?color ?brand ?type ?like ?outfit_id ?volume ?series_name ?start ?end

WHERE {
?item a prism:Item;
prism:term_start ?start;
prism:term_end ?end.
OPTIONAL{ ?item prism:image_num ?image_num.}
OPTIONAL{ ?item prism:volume ?volume.}

FILTER(xsd:dateTime(?start) <= NOW() && (xsd:dateTime(?end) + xsd:duration("P1D")) >= NOW())
    
?item prism:item_id ?id;
prism:rarity ?rarity;
prism:category ?category;
prism:name ?name;
prism:color ?color;
prism:brand ?brand;
prism:type ?type;
prism:like ?like;
prism:outfit_id ?outfit_id;
prism:series_name ?series_name.
}

これをPrismDBのSPARQLエンドポイントに入力して…

画像1

Run Query」を押すと…

画像2

こうなります。

コーデ管理アプリで使用するにはJSONのほうが都合がいいのでResult FormatJSONに変更します。

画像3

画像4

こうなります。

先程のPrismDBのURLをUnityからWebRequestでアクセスしてアイテムデータを取得します。以下のようにシリアライズ用のクラスを作っておけばUnityJsonUtilityを使用して簡単に取り込めます。

[Serializable]
public class PrismdbJSON
{
   public PrismdbResultsJSON results;


   public override string ToString()
   {
       return JsonUtility.ToJson(this, true);
   }
}

[Serializable]
public class PrismdbResultsJSON
{
   public List<PrismdbBindingsJSON> bindings;

   public PrismdbResultsJSON()
   {
       bindings = new List<PrismdbBindingsJSON>();
   }

   public override string ToString()
   {
       return JsonUtility.ToJson(this, true);
   }
}

[Serializable]
public class PrismdbBindingsJSON
{
   public PrismdbValueJSON id;
   public PrismdbValueJSON rarity;
   public PrismdbValueJSON category;
   public PrismdbValueJSON name;
   public PrismdbValueJSON image_num;
   public PrismdbValueJSON color;
   public PrismdbValueJSON brand;
   public PrismdbValueJSON type;
   public PrismdbValueJSON like;
   public PrismdbValueJSON outfit_id;
   public PrismdbValueJSON volume;
   public PrismdbValueJSON series_name;
   public PrismdbValueJSON start;
   public PrismdbValueJSON end;


   public override string ToString()
   {
       return JsonUtility.ToJson(this, true);
   }
}

[Serializable]
public class PrismdbValueJSON
{
   public string type;
   public string value;

   public override string ToString()
   {
       return JsonUtility.ToJson(this, true);
   }
}

所持情報

ゆくゆくはダブったコーデや欲しいコーデをアプリからツイートできれば面白いかなと思ったのでfirebaseのログインもTwitter認証でやってしまおうと思います。

説明丸投げですが以下の記事シリーズがとても参考になりました。

firebaseでは所持アイテムのIDと所持数をKeyとValueで紐付けて管理しています。所持していないものはIDが登録されていない or Valueが0としています。

画像5

アプリ内でスプレから取得した所持情報を更新する部分をfirebaseに差し替えて完了です。(正直、説明できるほど理解していないので内容は割愛します)

おわりに

ということでARコーデ管理やってみたアプリスプレ&GASからPrismDB&firebaseに改修したお話でした。

プリッカソンに参加しなければ今回の改修方法を知ることすらなかったので参加者各位には大変感謝しています。みんなも行こう、プリッカソン!

ARコーデ管理やってみたアプリ(人柱用)

まだまだテスト段階のアプリですが、スプレへの紐付けがなくなったことで自分以外でも使用することができるようになりました。

せっかくなのでアプリのapkを公開します。
以下の注意をよく読んで自己責任で使用してください。

基本的に人柱だと思ってください。アプリの利用により何らかの不利益や損害を被っても一切の責任を負いません
・firebaseの利用制限に引っかかった場合や、その他やむ終えない事情によりアプリの動作が停止する可能性があります
・端末によってはデザインが崩れる場合があります
・更新はちょいちょいしますが、自分が使えればいい程度のモチベーションなのであまり期待しないでください

以下、アプリ使用の諸注意です。
・Android9.0以上
・ARCore対応端末で使用してください。対応していないと動きません
・アイテムリストは現在排出される弾のみ対応です
・ARモード、アイテム数更新部分の動作が割と怪しいです
・公式Twitterアプリにログインした状態でないとTwitter認証に成功しない?Twitter Kit for Unityの挙動がイマイチわかっていません
・画像データはアプリ内に含まれません。画像の扱いについては検討中です。もし画像を表示したい場合は「\内部共有ストレージ\Android\data\com.Minoken.ARPriItemManager\files\ItemImage」内に公式HPのアイテム画像の数字部分のみをファイル名にしたjpgファイルを配置してください。画像はどこからか入手してください。

画像6

使い方

筐体のコーデをカメラで写すと所持状態がわかります。タップして決定すれば所持状態が+1されます。最上部のドロップダウンで弾の選択ができます。

台の反射の具合やコーデの種類によっては検出が困難な場合があります。そういうときはアイテム一覧から対象のアイテムを選択して個数を入力します。

apkのダウンロードはこちらから


この記事が気に入ったらサポートをしてみませんか?