Магазин
Урок 15 из 25 курса Игра на Unity: Tower Defense на Coddy.
С двумя башнями игроку нужен магазин. Он создаётся на основе данных: для каждого префаба башни кнопка показывает название и цену, а щелчок выбирает эту башню для следующей площадки. Панель ShopPanel внизу содержит две кнопки.
У кнопок, созданных в цикле, обработчики назначаются там же с помощью лямбда-выражения. Лямбда захватывает переменные, а не их значения, и у цикла for есть одна переменная i на все итерации: если щёлкнуть позже, каждая лямбда прочитает i уже после того, как цикл завершился. Локальная переменная, объявленная внутри цикла, создаётся заново на каждой итерации, поэтому сначала скопируй значение в неё:
for (int i = 0; i < levels.Length; i++)
{
LevelData level = levels[i];
levelButtons[i].onClick.AddListener(() => Load(level));
}Задание
СреднеДобавь магазин, в котором щелчок выбирает башню для строительства.
- В
BuildManagerзамениtowerPrefabсериализованнымиTower[] shop,Button[] shopButtonsиColor chosenColor, а также добавьprivate Tower chosen;. - В
Startназначь каждой кнопке текстprefab.data.towerName + "\n" + prefab.data.costи настрой вызовChoose(prefab)при щелчке; затем вызовиChoose(shop[0]). Chooseсохраняет выбранную башню и окрашивает её кнопку вchosenColor, а остальные — в белый цвет. Стройchosenзаchosen.data.cost.
Нажми «Играть» и построй оба вида башен. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
using UnityEngine.InputSystem;
public class BuildManager : MonoBehaviour
{
[SerializeField] private GameManager game;
[SerializeField] private Tower towerPrefab;
void Update()
{
if (!Mouse.current.leftButton.wasPressedThisFrame)
{
return;
}
Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
if (Physics.Raycast(ray, out RaycastHit hit) && hit.collider.TryGetComponent(out BuildPad pad))
{
Build(pad);
}
}
void Build(BuildPad pad)
{
if (pad.tower != null)
{
return;
}
if (!game.TrySpend(towerPrefab.data.cost))
{
Debug.Log("Not enough money");
return;
}
pad.tower = Instantiate(towerPrefab, pad.transform.position, Quaternion.identity);
}
}
Все уроки раздела Игра на Unity: Tower Defense
Потренируйтесь самостоятельно: Песочница Unity