Sklep
Lekcja 15 z 25 w kursie Gra w Unity: Obrona wieży w Coddy.
Przy dwóch wieżach gracz potrzebuje sklepu. Tworzy się on na podstawie danych: dla każdego prefabrykatu wieży przycisk wyświetla nazwę i cenę, a kliknięcie wybiera tę wieżę dla następnego pola. Panel sklepu u dołu zawiera dwa przyciski.
Przyciski utworzone w pętli otrzymują w niej swoje odbiorniki za pomocą lambdy. Lambda przechwytuje zmienne, a nie ich wartości, a pętla for ma jedno i dla wszystkich swoich iteracji: jeśli klikniesz później, każda lambda odczyta i po tym, jak pętla przekroczyła koniec. Zmienna lokalna zadeklarowana wewnątrz pętli jest nowa w każdej iteracji, więc najpierw skopiuj do niej wartość:
for (int i = 0; i < levels.Length; i++)
{
LevelData level = levels[i];
levelButtons[i].onClick.AddListener(() => Load(level));
}Wyzwanie
ŚredniDodaj sklep, w którym kliknięcie wybiera wieżę do zbudowania.
- W
BuildManagerzastąptowerPrefabserializowanymi polamiTower[] shop,Button[] shopButtonsiColor chosenColor, a także dodajprivate Tower chosen;. - W
Startustaw etykietę każdego przycisku naprefab.data.towerName + "\n" + prefab.data.costi spraw, aby kliknięcie wywoływałoChoose(prefab); następnie wywołajChoose(shop[0]). Choosezachowuje wybraną wieżę i nadaje kolor jej przyciskowi:chosenColor, a pozostałym biały. Budujchosenzachosen.data.cost.
Naciśnij „Graj” i zbuduj oba rodzaje wież. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
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);
}
}
Wszystkie lekcje w sekcji Gra w Unity: Obrona wieży
Poćwicz samodzielnie: Edytor online Unity