見出し画像

ダンスゲーを作りたい#43 リザルト画面 @プレイフェーズ

なんかここ数回突発で気付いて変更って感じだったのでプレイシステムの基盤シリーズの書き方無視してましたが、前回までで

・スコアマネージャーを立ち上げスコアを計測する

が達成されたイメージになります。実際には入力情報を蓄積してあるだけですが、スコアの算出ロジックは後で別途考えましょう。

さらに言うと

・終了したことを検知して画面になんか表示

部分はプレイマネージャーの機能の一部として実装済みです。

よって前回まででプレイ基盤は完成していました。びっくり。

個別のデータ取得やCPUの内部ロジック、スコアマネージャのロジック等、空箱な部分は多いですが、とりあえずリザルト画面を表示させてホームに帰りましょう。

画面遷移フロー

もういらんだろこれマジで。

画像2

伝えたいことは表示は二段階に分けますってくらいでしょうかね。

スコアと勝敗は1画面で、受け取れるもの類と経験値は2画面で表示します。

イメージ

画像5

最近圧倒的に飽きています。UI配置も適当過ぎてもう意味わからんレベルに入ってきてます。

本来は数値も段階的に表示したいし、二画面の下は受け取れるギフトなのでリスト表示すべきだしと、やり方まで完全に理解してるけど面倒でやってないだけのことが沢山あります。

ただまぁ、いまはフロー優先で。

ホーム画面戻ったらなんかクエスト一覧が倍表示されてますね。これはバグですが、バグ取りは最後にやればいいや。

処理

内部での処理は、経験値の取得やギフトの受け取りなど色々ありますが、基本的にサーバ側での処理なので、クライアント側では表示するだけです。

要はただ表示するだけで処理が無いので、ちょっとサイズ感の設定方法を改めて紹介しておきます。

私は横のフルサイズを基準に画面内に正方形のグリッド様のものを定義し、要素の総数がこの正方形内に収まるように作ってアス比を保持します。

画像3

実際には要素は何段階かに分かれているのでそれぞれの隙間の振り分け比率だけ決めておいて、画面の高さから正方形の高さ分引いた余りを比率に合わせて振り分けます。

画像4

例えば均等だとこんな感じ。

実際には諸所の理由でこれに即してないものの方が多いですが、基本はこうしておけばうまいことパワーでレイアウトを調整できるようになるでしょう。

もっとうまくやれば頭いい方法がありそうですが、想像できる確定情報からパワーでレイアウトを決定する手法として"脳筋レイアウト"と命名しておきましょう。

TIPS

今回ちょっとどうしようってなったポイントが一点だけ、

経験値データを取得してレベルアップの表示をしたいわけですが、経験値情報はレベル毎にサーバにアクセスしないとわからないので、

ゲージがぴょんぴょん上がる奴を単純に取得経験値と現在レベルだけでやることはできません。

でも、冷静に考えたら取得するなら獲得した経験値よりもレベルアップ前後のレベルと経験値の方が取得しやすいし、それがあればぴょんぴょん上がるエフェクトできますよね。

画像1

こういうこと!

つまり最初の状態と最後の状態があればあのぴょんぴょんエフェクトできるんですね。勉強になったなぁ~。

そういうコンポーネント作りましたよと。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
public class Charactor_Lv_script : MonoBehaviour{
   //実際はLv_Aftとかを精査してメンバに保存する処理があるけど省略
   
   public void PlayEffect(){
       if(Lv_Aft!=-1f){
           //マックスに移動する回数
           int count = Lv_Aft-Lv_Bef;
           //マックスにする回数、最終的に何割のとこで止めるのか、1回に何秒かけていいかを引数にセット
           Exp_roop(count,Exp_Aft,1f/(float.Parse(count.ToString())+1f));
       }
       
   }
   void Exp_roop(int count,float last_Exp,float Delay){
       GameObject Exp = this.gameObject.transform.GetChild(2).gameObject;
       GameObject Lv = this.gameObject.transform.GetChild(1).gameObject;        
       if(count<=0){
           //カウントがゼロなら最終到達したい場所にスライダーを移動
           Exp.GetComponent<Slider>().DOValue(last_Exp, Delay);
       }else{
           //カウントがあればマックスにしてレベルの表示値に+1
           Exp.GetComponent<Slider>().DOValue(1f, Delay).OnComplete(() =>{
               Exp.GetComponent<Slider>().value = 0f;
               Lv.GetComponent<Text>().text = (int.Parse(Lv.GetComponent<Text>().text)+1).ToString();
               //カウントを1減らして再帰
               count-=1;          
               Exp_roop(count,Exp_Aft,Delay);
           });
       }
   }
}

ひとまずホームに戻れました。よかった。

内部的にはデータが全然ちゃんと回ってないので、フローが見れるだけでプレイはできませんが、めんどくさいんで一旦後回し後回し。

先にガチャフローと育成フロー作ってから、必要に迫られる順でデータを取得できるように改修していけばいいのです。

なにせ今使ってるテストサーバの中身も仮設のもので実際とは処理違うし、今内部作りこんでも意味ないもんですから。

さて、いつまでモチベーションは持つのでしょうか。不安が募るばかりです。

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