1月8日4 分

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

最終更新: 1月23日

スイカゲーム風「ベジタブルゲーム」の作り方、12回目の今回で最終回、今回は野菜が結合し、進化するタイミングで新開した野菜の場所からスコアを表示させるという演出を行います。

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

https://unityroom.com/games/fivebox_vegetable01

12,スコア演出

12.1 スコアテキスト作成

Hierarchy上にあらたな CanvasText(TMP) を生成します。

生成したUI Canvas を Inspector から以下のように修正します。

名前ScoreCanvas に指定
 
RectTransformコンポーネント
 
  Scale : X:0.01、Y:0.01 に指定
 
Canvasコンポーネント
 
  Render Mode : World Space を指定し、野菜と同じ次元に表示
 
  Sorting Layer : FrontCanvas を指定し、最前面に表示

続いてText(TMP)を以下のように修正します。

❶ 名前: Text に指定
 
❷ RectTransformコンポーネント
 
  Width:200、Height:100 程度に指定
 
❸ TextMeshProコンポーネント
 
  ここは各自任意に指定して頂いて結構です。
 
  フォントやOutLineの色は、進化した野菜の種類によって変化します。
 
  Text : 「1234」など適当な値を入力
 
  Font Asset : 任意のフォントを指定
 
  Font Size : 80程度
 
  Alignment : 縦横中央揃え
 
❹ Shader
 
  ここも任意の配色にします。
 
  サンプルではOutlineを太くし、文字に立体感を出す演出をしています。
 
  ここで指定した色は後ほどプログラムで修正します

12.2 スコアテキストのプログラム

スコアテキストは表示後、0.5秒程度その場にとどまって、その後上昇、徐々に薄くなり最後は消滅します。

まずはこの動きを作成します。[02_Scripts]フォルダに ScoreManager というスクリプトファイルを作成し、上の課題で作成した ScoreCanvas にアタッチしておきます。

ここで新たに使用する変数は以下の通りです。

「ScoreManager.cs」を立ち上げて、NameSpaceにTMProを指定します。

ScoreManager.cs

using TMPro;

続いて変数の宣言と初期値の取得を行います。

ScoreManager.cs

RectTransform scoreRT;          //RectTransform型の変数
 
TextMeshProUGUI scoreText;      //TextMeshProUGUI型の変数
 

 
void Start()
 
{
 
scoreRT = GetComponent<RectTransform>();    //初期値を取得し代入
 
scoreText = GetComponentInChildren<TextMeshProUGUI>();   //初期値を取得し代入
 
}

続いて、スコアのテキストが2秒間上昇をしづ付け一旦停止、直後に1秒かけて徐々に薄くなって消滅するという動きを作成します。

同時に作成したコルーチンをStart()関数内で呼び出します。

ScoreManager.cs

IEnumerator FadeOut()
 
{
 
yield return new WaitForSeconds(0.5f);      //出現後0.5秒その場に待機
 
for(int i = 0; i < 200; i++)                //200回繰り返し
 
{
 
scoreRT.Translate(Vector3.up * 0.02f);  //0.02ずつ上昇
 
yield return new WaitForSeconds(0.01f); //0.01秒待機
 
}
 
for (int i = 0; i < 20; i++)                //20回繰り返し
 
{
 
scoreText.color -= new Color(0, 0, 0, 0.05f);   //5%ずつ薄くなる
 
yield return new WaitForSeconds(0.05f);         //0.05秒待機
 
}
 
Destroy(gameObject);                        //オブジェクトを削除
 
}
 

 
void Start()
 
{
 
//記述済みコード省略
 
StartCoroutine(FadeOut());
 
}
 

Hierarchy上の ScoreCanvas が上昇しテキストが徐々に薄くなって最後に消えるのが確認できたら、このオブジェクトを [03_Prefabs]フォルダ にドラッグ&ドロップでプレハブ化しておきます。

Hierarchy上のオブジェクトは不要なので、削除しておきましょう。

12.3 スコアテキスト生成プログラム

GameManagクラス にスコアを加算する関数 AddScore() が出来上がっているので、ここにスコアテキストを生成するプログラムを追加すればよさそうですね。

GameManagクラスで新たに使用する変数は1つだけです。

変数の宣言を行います。

GameManager.cs

 [SerializeField] GameObject scorePrefab;  //スコアプレハブ

インスペクターから宣言した変数に、上の課題で作成しプレハブ化した ScoreCanvas をAssignします。

また、スコアが加算されたときの効果音も、新たに指定したいので2つ目の音源に 「進化1」 という効果音を追加します。

関数:AddScore() を以下のように修正します。

GameManager.cs

void AddScore(int n,Vector3 pos)    //生成する場所を指定する引数:pos を追加
 
{
 
/*score += v_score[n];
 
scoreText.text = "Score:" + score; 記載済み */
 
source.PlayOneShot(crips[1]);       //効果音を鳴らす
 
// scorePrefab を受け取った場所に生成、scoreObj という名前で変数化
 
GameObject scoreObj = Instantiate(scorePrefab, pos, Quaternion.identity);
 
//scoreObj の大きさを野菜の種類に応じて拡大
 
scoreObj.transform.localScale *= (0.8f + (float)n / 5);
 
//野菜の種類に応じて、scoreObjのテキストを更新
 
scoreObj.GetComponentInChildren<TextMeshProUGUI>().text = v_score[n].ToString();
 
//scoreObjの色を赤色にして scoreColor という名前で変数化
 
Color scoreColor = new Color(1,0,0);                //赤
 
if (n < 4) scoreColor = new Color(0, 1, 1);             //ピーマン以下ならシアン
 
else if (n < 6) scoreColor = new Color(0, 1, 0);        //トマト、ナスなら緑
 
else if (n < 8) scoreColor = new Color(1, 1, 0);        //ジャガ、玉ねぎなら黄色
 
else if (n < 10 ) scoreColor = new Color(1, 0.25f, 0);  //ブロ、カリならオレンジ
 
else if (n < 12) scoreColor = new Color(1, 0, 0.4f);    //キャベツ、かぼちゃならピンク
 
//scoreObjのOutlineColor を変数:scoreColor に指定
 
scoreObj.GetComponentInChildren<TextMeshProUGUI>().outlineColor = scoreColor;
 
}
 

引数が増えているので、この関数を呼び出す部分(関数:CreateVegetable())も修正します。

受け取ったVector3型の引数 : p をそのまま、AddScore()の第二引数に受け渡します。

GameManager.cs

public void CreateVegetable(int t, int v, Vector3 p)
 
{
 
//前半省略
 
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,p);  //修正
 
}
 
}
 

これで、進化時に効果音が発生しスコアが表示されるプログラムが完成しました。

ここまでの記事で、このゲームの基本的な動き、演出が出来ています。

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

Vol.01 環境構築

Vol.02 クレーンの作成

Vol.03 野菜の素材作成

Vol.04 野菜のプログラム

Vol.05 クレーンのアニメーション

Vol.06 野菜の進化

Vol.07 スコア管理

Vol.08 鍋の水演出

Vol.09 炎の演出

Vol.10 泡の演出

Vol.11水しぶき演出

Vol.12 スコア演出


サンプル作品にはさらに進化の状況演出、ゲームオーバー後のランキング表示、セーブ&ロード機能などが付加されています。これらの機能の追加やさらなる改造、またはその他オリジナル作品を作ってみたいというご希望があれば、ファイブボックスまでお問い合わせください。

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

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

    0