今回は、画面上に制限時間と得点を表示するようにしましょう。
りんごの出現率が50%、バナナが30%、スイカが20%ですので、仮にりんごの得点を「10点」、バナナを「20点」、スイカを「30点」とします。
出現しやすいアイテムの点数を低くし、レアアイテムの点数を高くしましょう。
フルーツキャッチゲームの制限時間と得点を表示する
制限時間用のテキストを作成
まずは、「UI」→「Text」でテキストを作ります。名前を「Timer」に変更します。
配置する場所に決まりはありませんが、左上か右上の余白に配置するのが良いでしょう。私は左上に制限時間を表示して、右上に得点を表示しようと思います。
Timerのインスペクターからテキストのポジションをとフォントサイズを調整します。
数字を入力せず、マウスを使って好きな場所に来るように調整しても良いと思います。
同じように、得点用のテキストを作成して画面右上に配置しましょう。
テキスト名は「Score」にします。
スクリプトの作成
下順位が整ったところで、制限時間を減らしつつ、フルーツをキャッチしたら得点を更新するスクリプトを作成します。
新規でスクリプトを作成し名前を「Director」にします。
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEngine; | |
using UnityEngine.UI; | |
public class Director : MonoBehaviour | |
{ | |
GameObject timerText; | |
GameObject scoreText; | |
float time = 60.0f; | |
int score = 0; | |
public void CatchApple() | |
{ | |
this.score += 10; | |
} | |
public void CatchBanana() | |
{ | |
this.score += 20; | |
} | |
public void CatchWmelon() | |
{ | |
this.score += 30; | |
} | |
// Start is called before the first frame update | |
void Start() | |
{ | |
this.timerText = GameObject.Find("Timer"); | |
this.scoreText = GameObject.Find("Score"); | |
} | |
// Update is called once per frame | |
void Update() | |
{ | |
this.time -= Time.deltaTime; | |
this.timerText.GetComponent<Text>().text = this.time.ToString("F1"); | |
this.scoreText.GetComponent<Text>().text = this.score.ToString() + " 点"; | |
} | |
} |
こんな感じのスクリプトになりました。
まずは、シーンビューからGameObject.Find関数を使って、実体を見つけ出しそれぞれのテキスト変数に代入します。
制限時間は60秒に設定しています。Updateメソッド内でフレーム間の差分を減算。Time.deltaTimeはこれまでも頻繁に出てきたので慣れましたよね。
後は、ToStringメソッドを使い制限時間を表示。小数点以下第一位まで表示したかったので引数には「F1」を指定しています。得点表示も同じような形式で表示します。
得点の更新に関しては、各フルーツのキャッチメソッドを用意して、Unityちゃんがフルーツをキャッチした際に各メソッドにアクセスするようにします。
保存したら、空のオブジェクトを作成して「Director」スクリプトをアタッチしてください。
次に、Unityちゃんのコントローラスクリプトを更新しましょう。
追加・修正する箇所は上の赤枠部分です。
Directorスクリプトが持っているメソッドを呼び出すために、ゲームオブジェクトをFindメソッドで検索してdirector変数に代入します。スクリプト名ではなくオブジェクト名なので気を付けてください。
後は、これまでコンソールに得点を表示していた部分をメソッドの呼び出し書き換えればOK。
director変数を使ってそれぞれのメソッドを呼び出しましょう。これにて、テキストに得点の更新が伝えられるようになります。
保存したらゲームを実行してみましょう。
制限時間が減り、りんご取得で10点、バナナでプラス20点、スイカでプラス30点、合計60点と意図した通りに得点が更新されていますね。
物凄くゲームらしくなった気がします。次回は、難易度調整について考えます。