スコア
Coddyの「Unityゲーム:3Dスネーク」コースのレッスン 11/14。
GameManager でスコアが増えていきますが、誰にも見えません。左上隅にある TextMeshPro のテキストでスコアを表示します。Inspector で設定した TMP_Text フィールドに、コードから text を書き込みます。
数値が変わったあと、同じ場所でテキストを書き換えます。そうすれば、画面の表示がスコアに遅れることはありません。ショップのコイン数も同じ方法で更新できます。
public void Buy(int price)
{
coins -= price;
coinsText.text = "Coins: " + coins;
}シーン内のテキストに何が書かれていても、最初のフレームで実際のスコアが表示されるように、Start() でもテキストを一度設定します。
チャレンジ
中級画面にスコアを表示します。
GameManagerにusing TMPro;とpublic TMP_Text scoreText;を追加します(シーンでScoreTextをリンクします)。Start()でScore: 0を表示します。Eat()で、ポイントを加算した後に"Score: " + scoreを表示します。
「プレイ」を押して餌を食べます。左上の表示がScore: 1、Score: 2と増えていきます。その後、「確認」を押します。
自分で試してみよう
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)];
}
}
Unityゲーム:3Dスネークのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド