Cửa hàng
Bài học 15 trên 25 trong khóa học Game Unity: thủ thành của Coddy.
Với hai tháp, người chơi cần một cửa hàng. Cửa hàng tự tạo các nút từ dữ liệu: với mỗi prefab tháp, một nút hiển thị tên và giá, khi nhấp vào nút, người chơi chọn tháp đó cho bệ tiếp theo. ShopPanel ở phía dưới chứa hai nút.
Các nút được tạo trong vòng lặp sẽ gắn trình lắng nghe tại đó bằng lambda. Lambda nắm giữ các biến, không phải giá trị của chúng, còn một vòng lặp for chỉ có một i dùng chung cho mọi lần lặp: nếu nhấp vào nút sau đó, mọi lambda đều đọc i sau khi vòng lặp đã chạy quá điểm kết thúc. Biến cục bộ được khai báo bên trong vòng lặp sẽ là biến mới ở mỗi lần lặp, vì vậy hãy sao chép giá trị vào đó trước:
for (int i = 0; i < levels.Length; i++)
{
LevelData level = levels[i];
levelButtons[i].onClick.AddListener(() => Load(level));
}Thử thách
Trung bìnhThêm một cửa hàng để mỗi lần nhấp chọn tháp cần xây.
- Trong
BuildManager, thaytowerPrefabbằngTower[] shop,Button[] shopButtonsvàColor chosenColorđã được tuần tự hóa, rồi thêmprivate Tower chosen;. - Trong
Start, đặt nhãn cho mỗi nút làprefab.data.towerName + "\n" + prefab.data.costvà để thao tác nhấp gọiChoose(prefab); sau đó gọiChoose(shop[0]). Choosegiữ lại tháp đã chọn và đổi màu nút của tháp đó thànhchosenColor, còn các nút khác thành màu trắng. Xâychosenvới chi phíchosen.data.cost.
Nhấn Chơi rồi xây cả hai loại tháp. Sau đó nhấn Kiểm tra.
Tự làm thử
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);
}
}
Tất cả bài học trong Game Unity: thủ thành
Tự luyện tập: Playground Unity