Pilih Menara
Pelajaran 17 dari 25 dalam kursus Game Unity: Tower Defense di Coddy.
Ketika kamu mengeklik menara, sebuah panel terbuka dan menampilkan levelnya serta hal yang akan diperoleh pada level berikutnya. Klik pada menara mengenai salah satu bagiannya, yaitu alas atau bagian atas, yang merupakan anak dari menara. Jadi, hit.collider.GetComponentInParent<Tower>() menemukan menara yang menjadi induknya: fungsi ini memeriksa objek yang terkena, lalu naik ke objek-objek induknya.
Panel menampilkan statistik saat ini dan statistik pada level berikutnya secara berdampingan, sehingga pemain melihat manfaat peningkatan:
towerStatsText.text = "Damage " + data.DamageAt(level) + " > " + data.DamageAt(level + 1);Tantangan
SedangKlik tower untuk membuka panelnya.
- Di
BuildManager, tambahkanprivate Tower selected;. Klik tower untuk memilihnya, klik apa pun selain tower untuk tidak memilih apa pun. - Tambahkan
towerPanelyang diserialisasi (sebuah GameObject) sertatowerNameText,towerStatsText,upgradeLabel(TMP_Text). Panel hanya ditampilkan saat tower dipilih. - Isi panel:
Arrow level 1,Damage 2 > 3danRange 4.5 > 5dalam dua baris,Upgrade 40.
Tekan tombol “Main”, bangun tower, lalu klik tower itu. Setelah itu, tekan tombol “Periksa”.
Coba sendiri
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
using TMPro;
public class BuildManager : MonoBehaviour
{
[SerializeField] private GameManager game;
[SerializeField] private Tower[] shop;
[SerializeField] private Button[] shopButtons;
[SerializeField] private Color chosenColor = new Color(1f, 0.85f, 0.3f);
private Tower chosen;
void Start()
{
for (int i = 0; i < shop.Length; i++)
{
Tower prefab = shop[i];
shopButtons[i].GetComponentInChildren<TMP_Text>().text = prefab.data.towerName + "\n" + prefab.data.cost;
shopButtons[i].onClick.AddListener(() => Choose(prefab));
}
Choose(shop[0]);
}
void Choose(Tower prefab)
{
chosen = prefab;
for (int i = 0; i < shop.Length; i++)
{
shopButtons[i].image.color = shop[i] == chosen ? chosenColor : Color.white;
}
}
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(chosen.data.cost))
{
Debug.Log("Not enough money");
return;
}
pad.tower = Instantiate(chosen, pad.transform.position, Quaternion.identity);
}
}
Semua pelajaran di Game Unity: Tower Defense
Latihan sendiri: Playground Unity