Счёт
Урок 11 из 14 курса Игра на Unity: 3D-змейка на Coddy.
Счёт увеличивается в GameManager, но его никто не видит. Текст TextMeshPro в левом верхнем углу показывает счёт: поле TMP_Text, заданное в Inspector, и его 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: 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)];
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.