5. ゲームのUIを追加する - remyroez/UnityTutorial GitHub Wiki

5. ゲームのUIを追加する

ゲーム画面に様々な情報を表示するために、GUIを追加します。

得点表示UIの追加

得点を表示するためのUIを追加します。

Canvas の追加

まずは、UIの基礎となる Canvas を追加します。

  1. Hierarchy ビューを選択。
  2. Create > UI > Canvas を選択し、新規キャンバス "Canvas" を作成。
  3. Inspector ビューを選択。
  4. Canvas Scaler > Ui Scale Mode"Scale With Screen Mode" に設定。
  5. Canvas Scaler > Screen Match Mode"Expand" に設定。

同じ階層に EventSystem も追加されますが、今回は使用しません。

Text の追加

得点を表示するためのテキストを追加します。

  1. Hierarchy ビューを選択。
  2. Create > UI > Text を選択し、Canvas の下に、新規テキスト "ScoreText" を作成。
  3. Inspector ビューを選択。
  4. Text > Text"0" に設定。
  5. Text > Character > Font Style"Bold" に設定。
  6. Text > Character > Font Size"60" に設定。
  7. Text > Paragraph > Alignment"center(真ん中)/bottom(右端)" に設定。
  8. Rect Transform > Anchor Presets(左側のアイコン) から、 "center/bottom" を選択。
  9. Rect Transform > Width/Height"400, 100" に設定。
  10. Rect Transform > Pivot"0.5, 0" に設定。

これで、画面中心の下側にくっつくテキストが出来ました。ウィンドウサイズが変更されても、常に下に表示されます。

得点表示ハンドラの作成

得点を受け取り、表示するためのハンドラを作成します。

スクリプトの準備

これまで通り、ハンドラを作成します。

IScoreViewHandler.cs

public interface IScoreViewHandler : IEventSystemHandler
{
    void SetScore(int score);
}

ScoreViewHandler.cs

public class ScoreViewHandler : MonoBehaviour, IScoreViewHandler
{
    public void SetScore(int score)
    {
        Text text = GetComponent<Text>();
        if (text)
        {
            text.text = score.ToString();
        }
    }
}

ScoreTextScoreViewHandler をコンポーネントとして設定しておきます。

得点獲得処理の実装

これまでは、得点アイテムに接触すると削除するのみでしたが、得点として加算し、得点表示ハンドラへ送信するようにします。

ScoreHandler.cs

public class ScoreHandler : MonoBehaviour, IScoreHandler
{
    public GameObject scoreView;

    protected int score = 0;

    public void OnTriggerEnterItem(GameObject target, Collider hit)
    {
        if (hit.CompareTag("Player"))
        {
            score += 1;
            Destroy(target);

            UpdateScore();
        }
    }

    public void UpdateScore()
    {
        if (!scoreView) return;

        ExecuteEvents.Execute<IScoreViewHandler>(
            scoreView,
            null,
            (handler, data) => handler.SetScore(score)
        );
    }
}

得点アイテムに接触すると得点を1加算し、得点表示ハンドラへ現在の得点を送信します。

scoreView には予め ScoreText を設定しておきます。

テストプレイ

実装した処理が正しく動作するか確認します。

  1. ゲームを開始する。
  2. 画面下に ”0" と表示されることを確認する。
  3. 得点アイテムに接触すると、画面下の得点表示が1ずつ増えていくことを確認する。

画面下に何も表示されていなければ、位置調整が必要です。接触しても数字が増えない場合は、加算を忘れているか、送信を忘れているかです。コンポーネントとして設定し忘れている可能性もあります。

⚠️ **GitHub.com Fallback** ⚠️