Menu
CoddyTech

Can Çubukları

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 10 / 56.

Azalan bir çubuk, Image Type ayarı Filled olarak belirlenmiş bir UI Image'dır. Bu ayar, Image'a bir Source Image atandıktan sonra görünür; None seçiliyken Inspector bu ayarı gizler. Fill Method Horizontal ve Fill Origin Left olduğunda çubuk sol ucuna doğru kısalır; fillAmount, 0 ile 1 arasında, ne kadarının çizileceğini belirler. Arkasındaki koyu renkli bir Image boş kısmı gösterir. Unity, fillAmount değerini sınırlar; bu nedenle 1.4 tam bir çubuk, -0.2 ise boş bir çubuk çizer.

fillAmount, kalan canın oranıdır: can değerinin maksimum cana bölümü. int alanlarıyla bu işlem tamsayı bölmesidir ve 350 / 500 sonucu 0 olur; bu yüzden önce taraflardan birini float türüne dönüştür. Image, UnityEngine.UI içinde bulunur. Bu boss çubuğu her isabetten sonra güncellenir:

public Image bossBar;
public int bossMaxHp = 500;
private int bossHp = 500;

public void Hit(int damage)
{
    bossHp = Mathf.Max(bossHp - damage, 0);
    bossBar.fillAmount = (float)bossHp / bossMaxHp;   // 350 / 500 = 0.7
}

Çubuğun rengi de canı takip edebilir: bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); çubuk doluyken yeşildir ve boşaldıkça kırmızıya döner.

challenge icon

Görev

Kolay

Şövalyenin, canı etkilenmeden önce hasarı emen bir kalkanı var. Ok tuşları onu hareket ettirir (Mover.cs) ve dikenlere bastığında dikenler ona 30 hasar verir (Spikes.cs). Knight.cs dosyasını yaz; sahnede healthBar ve shieldBar bağlantıları yapılır, ancak bu çubuklar sahnede boştur:

  • hp, maxHp (80) değerinden başlar ve shield, maxShield (40) değerinden başlar; iki çubuk da tamamen dolu başlar.
  • TakeDamage(int amount): kalkan, hasarın kalan gücünün yettiği kadarını alır ve geri kalanı hp değerinden düşer; bu değer hiçbir zaman 0'ın altına inmez.
  • Her darbeden sonra iki çubuk da kalan miktarı gösterir: shieldBar, maxShield içindeki kalkan miktarını; healthBar ise maxHp içindeki hp miktarını gösterir.

Play'e bas, birkaç kez dikenlerin üzerine yürü, ardından Check'e bas.

Kendin dene

using UnityEngine;
using UnityEngine.UI;

public class Knight : MonoBehaviour
{
    public Image healthBar;
    public Image shieldBar;
    public int maxHp = 80;
    public int maxShield = 40;
    private int hp;
    private int shield;

    void Start()
    {
        hp = maxHp;
        shield = maxShield;
        // Her iki çubuğu da doldur
    }

    public void TakeDamage(int amount)
    {
        // Kalkan, karşılayabildiği kadar hasarı karşılar; kalanı hp değerinden düşülür, ancak hp 0 değerinin altına inmez. Ardından her iki çubuğu da göster.
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler