ファイブボックススイカゲーム風、ベジタブルゲームを作ってみようサムネイル画像

スイカゲーム風「ベジタブルゲーム」の作り方 Vol.07 - ファイブボックス

スイカゲーム風「ベジタブルゲーム」の作り方 Vol.07

ユニティルーム サンプルの投稿ゲーム

ファイブボックス作成 スイカゲーム風、ベジタブルゲームイメージ画像

「ベジタブルゲームの作り方」その他の記事はこちらから

スコア管理

スコア表示UI

まずはスコアを表示するためのUIを用意します。

今回は表現の幅が豊富な TextMeshPro を使用してみます。作成済みの Canvas の配下で、UI ⇒ TextMeshPro を選択します。TMP Importer が立ち上がり、TMP Essential、及び TMP Essential & Extras のインポートが促されるので、ともにインポートしておきます。

スイカゲーム風ベジタブルゲームの作り方 スコア表示UIの作成手順1

取り込んだTextを以下のように修正します。

名前:ScoreText に指定
RectTransformコンポーネント
  AnchorPreset:Top-Left に指定し左上に基準点を置く
  PosX:500,PosY:-80
  Width:600、Height:200
TextMeshProコンポーネント
  Text:「Score:999999」などとサンプル文字を代入
  FontAsset: 任意のフォントを指定
  FontSize: 任意の大きさを指定
  Alignment:横位置:左寄せ、縦位置:中央
ElectricHi Highway Sighn
  これも任意で色の装飾を行います。

ベジタブルゲームの作り方、スコアテキストの設定

スコア更新プログラム

スコアは野菜が進化したタイミングで加算します。
また大きい野菜程高い得点が加算されるようにします。このスコアは GameManagerクラス で管理したいと思います。
ここで新たに使用する配列、変数を確認します。

配列名アクセス説明
v_Scoreintpublic進化時のスコア(13個)

また使用する変数は以下の通りです。

変数名アクセス説明
scoreintprivateスコアを管理する変数
scoreTextTextMeshProUGuiprivateTextMeshProを管理する変数

まずは GameManagerクラス のNameSpceにTextMeshProを使用するための宣言を行います。

using UnityEngine.UI;

続いて変数、配列の宣言と初期値の指定、取得を行います。

public int[] v_score = new int[13];  //野菜の大きさを管理する配列
int score;                              //Scoreを管理する変数
TextMeshProUGUI scoreText;              //Scoreを表示するUI

void Start()
{
    //記述済みコード省略
    //スコア配列に得点を代入
    v_score = new int[] {0, 1, 2, 4, 8, 16, 32, 64, 150, 400, 1000, 3000, 10000 };
    scoreText =GameObject.Find("ScoreText").GetComponent<TextMeshProUGUI>();
}

配列:v_Score[] に入れた変数:Score の値は、その野菜に進化したときに発生するスコアです。

この値はサンプルなので、各自任意の値を指定してみましょう。

12個目の「かぼちゃ」が進化したときのプログラムはまだ作成していませんが、スコアだけ用意しておきたいので、v_Score[] の要素数は13個にしています。

続いてスコア加算のプログラムを作成します。

void AddScore(int n)    //引数を受け取ってスコアを加算する関数
{
    score += v_score[n];                //scoreにv_score[]のn番目の値を加算
    scoreText.text = "Score:" + score;  //UIを更新
}

作成した関数を呼び出します。

CreateVegetable(int t, int v, Vector3 p)関数 で進化生成のタイミングで、引数:v をそのまま渡して呼び出します。

public void CreateVegetable(int t, int v, Vector3 p)
{  
    if (v == 12)  
    {
      //GameObject meat= Instantiate(meatPrefab, p, Quaternion.identity); 記述済み
      //meat.GetComponent<SpriteRenderer>().sprite = neatImg[Random.Range(0, 3)]; 記述済み
      AddScore(v);  //AddScore()関数を呼び出す
      //return;   記述済み
    }
    /*
    GameObject vege = Instantiate(v_Prefab[v], p, Quaternion.identity);
    VegetableManager vm = vege.GetComponent<VegetableManager>();
    vm.index = v;
    if (t == 0) 
    {
        vm.type = VegetableManager.MOVETYPE.NEXT;
        vege.GetComponent<CircleCollider2D>().enabled = false; 
        vege.transform.SetParent(tray.transform);
    } 上記記述済み*/
    else if (t == 1)
    {
      /*vm.type = VegetableManager.MOVETYPE.STAY;       
        vege.transform.localScale = Vector3.one * v_size[v];       
        vege.transform.SetParent(vegetables.transform); 
        vege.GetComponent<Rigidbody2D>().AddForce(Vector2.up * 80); 記述済み*/
        AddScore(v);  //AddScore()関数を呼び出す
    }
}

スコアが加算されているのを確認してください。

開始時のスコアが正しく表示されていないので、Start() 関数内で初期値を指定します。

void Start()
{
     scoreText.text = "Score:0";
}

これでスコアが正しく表示されるようになりました。

ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。

TOP