Bir Kule Seç
Coddy'nin Unity Oyunu: Kule Savunması kursunda ders 17 / 25.
Bir kuleye tıkladığında, seviyesi ve bir sonraki seviyenin neler getireceğini gösteren bir panel açılır. Kuleye tıklamak, kulenin çocuk nesneleri olan parçalarından birine, tabanına veya başlığına isabet eder; bu yüzden hit.collider.GetComponentInParent<Tower>() bu parçaların ait olduğu kuleyi bulur: isabet edilen nesneye, ardından üst nesnelerine bakar.
Panel, mevcut ve bir sonraki seviyedeki istatistikleri yan yana gösterir; böylece oyuncu yükseltmenin ne kazandıracağını görür:
towerStatsText.text = "Damage " + data.DamageAt(level) + " > " + data.DamageAt(level + 1);Görev
OrtaPanelini açmak için bir kuleye tıkla.
BuildManageriçindeprivate Tower selected;ekle. Bir kuleye tıklamak onu seçer; başka herhangi bir şeye tıklamak hiçbir şeyi seçmez.- Serileştirilmiş
towerPanel(bir GameObject) iletowerNameText,towerStatsTextveupgradeLabel(TMP_Text) ekle. Panel yalnızca bir kule seçiliyken görünür. - Paneli doldur:
Arrow level 1, iki satırdaDamage 2 > 3veRange 4.5 > 5,Upgrade 40.
“Oyna” düğmesine bas, bir kule inşa et ve ona tıkla. Ardından “Kontrol et” düğmesine bas.
Kendin dene
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);
}
}
Unity Oyunu: Kule Savunması bölümündeki tüm dersler
Kendi başına pratik yap: Unity playground