top of page

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

スイカゲーム風「ベジタブルゲーム」の作り方、前回までの記事で一連のゲームのフローが完成しています。今回からは演出関連の機能を追加していきましょう。まずはスコアの管理から。


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

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

7,スコア管理


7.1 スコア表示UI


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

今回は表現の幅が豊富なTextMeshProを使用してみます。

作成済みのCanvasの配下で、UI ⇒ TextTextMeshPro を選択します。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   これも任意で色の装飾を行います。
スコアテキストの設定

7.2 スコア更新プログラム


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

配列名

アクセス

説明

v_Score

int

public

進化時のスコア(13個)

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

変数名

アクセス

説明

score

int

private

スコアを管理する変数

scoreText

TextMeshProUGui

private

TextMeshProを管理する変数

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


gameManager.cs

using UnityEngine.UI;

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


gameManager.cs

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個にしています。

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


gameManager.cs

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 をそのまま渡して呼び出します。


gameManager.cs

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() 関数内で初期値を指定します。


gameManager.cs

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

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


「VegetablGameの作り方」その他の記事はこちらから


 

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

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

最新記事

すべて表示

ファイブボックス 上田教室

bottom of page