Para
Coddy'nin Unity Oyunu: Kule Savunması kursunda ders 6 / 18.
Kuleler paraya mal olur. Para GameManager'a aittir ve BuildManager ondan ödeme yapmasını ister. İstemek ve ödemek tek bir adımdır: parayı kontrol eden, yeterli olduğunda parayı alan ve bunu yapıp yapmadığını Dictionary.TryGetValue yanıtlarındaki gibi bir bool ile belirten bir yöntem. Bir otomatın cüzdanı:
public bool TryPay(int price)
{
if (price > coins)
{
return false;
}
coins -= price;
coinText.text = coins + " coins";
return true;
}Kontrol yapılmadan hiçbir çağıran ödeme yapamaz ve başka hiçbir şey paraları değiştirmediği için para miktarı asla sıfırın altına düşmez. price, prefab üzerinde bulunur: kendi betiğinin bir alanıdır ve prefab'ın Inspector'ında ayarlanır. Prefab, diğer nesneler gibi yüklenmiş bir nesnedir; bu nedenle snackPrefab.price, herhangi bir şey oluşturulmadan önce okunarak oluşturulup oluşturulmaması gerektiğine karar verilebilir.
Görev
OrtaOyuncu 150 parayla başlar ve bir ArrowTower 50'ye mal olur.
Toweriçinde bir public intcostekleyin. ArrowTower prefab'ı bunu 50 olarak ayarlar.GameManageriçinde serileştirilmiş bir intstartMoneyve serileştirilmiş bir TMP_TextmoneyTextilestartMoneydeğerinden başlayan private intmoneyekleyin. Başlangıçta ve her değişiklikten sonra bunuMoney: 150olarak gösterin.public bool TrySpend(int amount)ekleyin:amountpara miktarından fazlaysa false döndürün ve hiçbir şeyi değiştirmeyin; aksi takdirde bu miktarı paradan düşürün, parayı gösterin ve true döndürün.BuildManageriçinde serileştirilmiş birgamealanı (bir GameManager) ekleyin. Boş bir alana yalnızcagame.TrySpendprefab'ıncostdeğerini öderse kule yerleştirilir; aksi takdirdeNot enough moneygünlüğe yazılır.
Play'e basın ve para bitene kadar kule inşa edin, ardından Check'e basın.
Kendin dene
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
[SerializeField] private int startLives = 20;
[SerializeField] private TMP_Text livesText;
private int lives;
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
}
void Start()
{
lives = startLives;
ShowLives();
}
void OnReachedBase(Enemy enemy)
{
lives -= enemy.data.damage;
ShowLives();
}
void ShowLives()
{
livesText.text = "Lives: " + lives;
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.