今日はUnityゲーム制作講座、第十三弾です!
今日はスコアだっけ?結構面倒なんだよね?
だねぇ。難しくはないんだけど、労力に対して結果が地味だからキャラクターを動かすのとかに比べると面倒に感じるよ。まぁでも簡単だからサクっと解説するよ!
Unityで画面上にスコアを表示し、敵を倒した時にカウントアップさせる方法
スコア表示用UI作成
まずはHierarchyのCanvasに、スコアを表示するTextを追加し、Sceneビューで位置を調整しましょう。
ここではScoreと命名した空のGameObjectと、ScoreLabel、ScoreTextと名前をつけたTextを以下のように配置しています。
ScoreLabelのTextComponentのText部分を「Score:」、ScoreTextの同じ箇所を「9999」としておきます。
Gameビューで表示を確認し、フォントサイズや表示位置がおかしくなければOKです。
スコア表示用のScriptを作成
Scriptsフォルダに新しいScriptを作成します。名称はScoreManagerとしておきましょう。
作成したScoreManagerを開き、中身を以下の内容に書き換えます。
Scriptを保存したら、HierarchyにあるScoreTextのGameObjectにドラッグ・アンド・ドロップで貼り付けます。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ScoreManager : MonoBehaviour { private Text scoreText; public int score = 0; void Start() { scoreText = GetComponentInChildren<Text>(); scoreText.text = "0"; } void Update() { scoreText.text = score.ToString(); } }
ScoreManagerをScoreTextにアタッチ
敵を倒す機能を作った回で作成したEnemyManagerを以下の内容に書き換えて保存します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyManager : MonoBehaviour { private float speed = 0.05f; private int count = 0; private GameObject scoreText; // 今回追加箇所 void Start() { scoreText = GameObject.Find("ScoreText"); // 今回追加箇所 } void Update() { count += 1; if (count < 500) { transform.position += transform.right * speed; } else if(count > 500) { transform.position += transform.right * speed * -1; } if (count == 1000) { count = 0; } } void OnCollisionEnter(Collision col) { if (col.gameObject.CompareTag("Bullet")) { Debug.Log("BulletCollision"); scoreText.GetComponent<ScoreManager>().score = scoreText.GetComponent<ScoreManager>().score + 300; // 今回追加箇所 Destroy(this.gameObject); } } }
動作確認を行う
これで敵を倒したときにスコアがカウントアップされるようになっているはずなので、想定通りの動作になっているかを確認しましょう。
イメージどおりに動いてくれていれば完了です。
細かい解説は動画の方で行っていますので、合わせて見てもらえたらなと思います。
今回は言うほど面倒じゃなかったような気がするなぁ
もう十三回だから細かい説明は飛ばしてるし、敵が何種類もいて敵ごとに獲得スコアが違うとかやってないからね。そういうのやろうとすると、またちょっとややこしくなるから、最低限にしておいたんだ。