【Unity】uGUIについて① スコア表示編
以前の更新からだいぶ時間が経ってしまいしたが、また書いていきたいと思っています。
今回は、おもちゃラボさんのシューティングゲーム第5回を参考にし、分割して更新していきたいと思っています。
あくまでも個人用のメモとしての役割に重きを置いていますので、ご了承下さい。
もしかしたら捉え方が間違っているかもしれないのですみません。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;←uGUIを使用する際は必ず記載しないとエラーが出る。
public class UIController : MonoBehaviour {
int score=0;←scoreがまず0から開始することを宣言する。
GameObject scoreText;←scoreTextを格納する為の箱を作成。スクリプトから扱える様にする。
public void AddScore(){
this.score += 10;←AddScoreを呼び出す度にscoreの中身を10ずつプラスしていく。
}
// Use this for initialization
void Start () {
this.scoreText = GameObject.Find ("Score");←開始と同時にscoreTextにHierarchy内のCanvas▻Scoreを代入する。
}
// Update is called once per frame
void Update () {
scoreText.GetComponent<Text> ().text = "Score:" + score.ToString ("D4");←scoreTextのtextにScore:と現状のスコアを代入する。※1
}
}
※1 ToString関数は数値を文字に変換する。
隕石を破壊する度に更新されているスコアを画面上に文字として表示する為に用いている。
また、カッコ内のD4について、Dは整数で4は4桁という意味。
4の部分を3にすると3桁に変わる。
Dの部分をCにすると通貨を表し、$(ドル)で文字が表示される。
下記のサイト様を参考にさせて頂きました。ありがとうございます。
書式を指定して数値を文字列に変換する - .NET Tips (VB.NET,C#...)
次は、弾と隕石が衝突した時にスコアが更新されるようにするために追加されたスクリプトを見ていきたいと思います。
下記でいう赤文字の部分になります。
using UnityEngine;
using System.Collections;
public class BulletController : MonoBehaviour {
public GameObject explosionPrefab;
void Update () {
transform.Translate (0, 0.2f, 0);
if (transform.position.y > 5) {
Destroy (gameObject);
}
}
void OnTriggerEnter2D(Collider2D coll) { // 衝突したときにスコアを更新する
GameObject.Find ("Canvas").GetComponent<UIController> ().AddScore ();←OnTriggerEnter2D※は衝突した時に判定する時に使用。
Hierarch内の"Canvas"に適用したスクリプトの<UIController>の中にあるAddScore関数を呼び起こす。
// 爆発エフェクトを生成する
GameObject effect = Instantiate (explosionPrefab, transform.position, Quaternion.identity) as GameObject;
Destroy (effect, 1.0f);
Destroy (coll.gameObject);
Destroy (gameObject);
}
}
※OnTriggeerについて
OnTriggeerEnterは衝突した瞬間
OnTriggeerExitは衝突が終わった瞬間
OnTriggerStayは触れている時に使用する。