見出し画像

ダンスゲーを作りたい#46 【試作】ビルド画面(+データ構造の見直し)

データ構造を見直したいわけです。

主にリスト。

データ構造

一覧形式で保存するデータを、List型に保存していました。

例えば所持キャラ一覧情報は、キャラ情報をListとして持っていました。

[
    {
        ID:"000001",
        Name:"キャラ名",
        Lv:100,
        Awake:2
    },
    {
        ID:"000002",
        Name:"キャラ名",
        Lv:15,
        Awake:1
    },...
]

これで別にいいと思ってたんですが、そんなことはないわけで、

例えばこれだと特定のキャラIDに対して何か操作をする際、キャラデータを特定するには、愚直に考えると逐一データを周回してIDを検証するか、事前にIDを抽出してマップに置き換えておくなど対策が必要です。

しかしながら今回は、同一キャラを引いた場合覚醒する方式なので、キャラIDはユーザに対しユニークです。つまりリストはデータ形式として微妙なわけです。

よってこれは、

{
"
000001":{
        ID:"000001",
        Name:"キャラ名",
        Lv:100,
        Awake:2
    },
"000002":{
        ID:"000002",
        Name:"キャラ名",
        Lv:15,
        Awake:1
    },...
}

こういうことです。

こうするなら内部にIDを持たす必要はないですが、持ってた方が楽でもあるので取っといちゃいます。

例えばギフトデータでは、ギフトそのものはユニークなIDを持ちますが、ユーザ単位で同じギフトを複数受け取る可能性があるため、ユーザに対してはユニークではありません。

こういう場合はキャラと同じようにやると同じキーが出現して詰みますが、こういう場合はユーザにギフトが付与されるたびに別途ユニークキーを吐き出せばいいのです。

DB定義しちゃえば当たり前な内容ですが、DB作ってないが故の抜けな気がしました。

ギフト系は特に困ってないので省略しますが、キャラクターは困るので今回はそこだけ直しておきます。

だいぶ以前に紹介したマネージャの形式だと、Syncメゾットの中だけ変更する形になります。

public Dictionary<string,BuildData> Map;
   public async override Task<bool> Sync(JObject obj){
        Dictionary<string,BuildData> map = new Dictionary<string,BuildData>();
        JObject BDL = (JObject)obj["BuildDataList"];
        foreach(var data in BDL){
           string jsonStr = JsonConvert.SerializeObject(data.Value, Formatting.None);
           BuildData Data = JsonUtility.FromJson<BuildData>(jsonStr);  
           map.Add(data.Key,Data);
        }
        Map=map;
}

ほんとはトライキャッチで囲って失敗判定してるのでそこは適宜やって頂ければと。

キャラリストテンプレートに改修

データ構造の変更に伴って、キャラリストの取得部分もkeyValueに対応させます。

キャラリストで使うのはData側のみなので、生成部分をValueを見るよっていう表記に直すだけですね

DataList Data = await Manager.DataManager.GetData<DataList>(new DataList());
foreach(var D_kvp in Data.Map){
   Data data = D_kvp.Value;
   GameObject ICO = Manager.TmpObject.CharacterIcon(data.CharaID,size);
   ICO.GetComponent<Charactor_icon_script>().OnTap((id)=>{
       OnIconTap(id);
   });
   ICO.transform.SetParent(CA.transform, false);
}

さらに、ビルド画面というかキャラ一覧画面を表示するにあたってリストを消す部分がPhaseManagerと連動しないのに気づいちゃったので、Listが閉じたときに動くアクションも登録できるようにしました。

方式はタップ時のアクションと全く同じなので割愛します。

ビルド画面

育成用の画面ですが、今のところキャラ詳細画面内で完結してもいいんじゃないかとすら思っています。

要素として考えているのはレベルと覚醒段階くらいなもんで、経験値アイテムを食わせてレベルを上げる程度なら別途画面を作る必要もないんじゃないかというレベルです。

よって一旦ボタン押したらキャラ一覧が出るという程度ですがイメージです。

画像1

詳細画面も以前は空白でしたが戻るボタンとIDが受けてることを確認するためのテキストを用意してます。

これで別途画面を作るにせよこのままでいくにせよ、とりあえずはOKそうです。

ショップ画面はまた面倒事が多いのであれですが、理論上はデータだけちゃんとすればもう遊べますね。

次回以降はデータ構造とかをちゃんとしながら遊べるようにしていきたいですね。

サーバ側なので概念図の話しかしないかもしれませんけど。

とりあえず今回は以上です。

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