Menu
CoddyTech

スコア

Coddyの「Unityゲーム:3Dスネーク」コースのレッスン 11/14。

GameManager でスコアが増えていきますが、誰にも見えません。左上隅にある TextMeshPro のテキストでスコアを表示します。Inspector で設定した TMP_Text フィールドに、コードから text を書き込みます。

数値が変わったあと、同じ場所でテキストを書き換えます。そうすれば、画面の表示がスコアに遅れることはありません。ショップのコイン数も同じ方法で更新できます。

public void Buy(int price)
{
    coins -= price;
    coinsText.text = "Coins: " + coins;
}

シーン内のテキストに何が書かれていても、最初のフレームで実際のスコアが表示されるように、Start() でもテキストを一度設定します。

challenge icon

チャレンジ

中級
  1. GameManagerにusing TMPro;とpublic TMP_Text scoreText;を追加します。シーンでこれを左上のScoreTextに設定します。
  2. Start()でScore: 0を表示します。
  3. Eat()で新しいスコアを表示します。3つ目の餌を食べた後はScore: 3と表示されます。

Playを押して餌を食べてから、Checkを押します。

自分で試してみよう

using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Snake snake;
    public GameObject foodPrefab;
    private Transform food;
    private int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        food = Instantiate(foodPrefab).transform;
        MoveFood();
    }

    public bool IsFood(Vector3 cell)
    {
        return cell == food.position;
    }

    public void Eat()
    {
        score++;
        MoveFood();
    }

    void MoveFood()
    {
        List<Vector3> free = new List<Vector3>();
        for (int x = -snake.edge; x <= snake.edge; x++)
        {
            for (int z = -snake.edge; z <= snake.edge; z++)
            {
                Vector3 cell = new Vector3(x, 0f, z);
                if (!snake.Occupies(cell))
                {
                    free.Add(cell);
                }
            }
        }
        food.position = free[Random.Range(0, free.Count)];
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityゲーム:3Dスネークのすべてのレッスン