A Loja
Lição 15 de 25 do curso Jogo de Unity: Defesa de Torres da Coddy.
Com duas torres, o jogador precisa de uma loja. Ela é montada a partir dos dados: para cada prefab de torre, um botão mostra o nome e o preço, e um clique escolhe essa torre para a próxima plataforma. O ShopPanel na parte inferior contém os dois botões.
Os botões criados em um loop recebem seus listeners ali, com uma lambda. Uma lambda captura variáveis, não seus valores, e um loop for tem um único i para todas as suas iterações: se clicadas depois, todas as lambdas leem i depois que o loop já passou do fim. Uma variável local declarada dentro do loop é nova a cada iteração, então copie o valor para ela primeiro:
for (int i = 0; i < levels.Length; i++)
{
LevelData level = levels[i];
levelButtons[i].onClick.AddListener(() => Load(level));
}Desafio
MédioAdicione uma loja onde um clique escolhe a torre para construir.
- Em
BuildManager, substituatowerPrefabporTower[] shop,Button[] shopButtonseColor chosenColorserializados, e adicioneprivate Tower chosen;. - Em
Start, rotule cada botão comprefab.data.towerName + "\n" + prefab.data.coste faça um clique chamarChoose(prefab); depois,Choose(shop[0]). Choosemantém a torre selecionada e colore seu botão comchosenColor, deixando os outros brancos. Construachosenpelo custo dechosen.data.cost.
Pressione “Jogar” e construa os dois tipos. Depois, pressione “Verificar”.
Experimente você mesmo
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);
}
}
Todas as lições de Jogo de Unity: Defesa de Torres
Pratique por conta própria: Playground de Unity