Menu
CoddyTech

Can Çubukları

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

Boşalan bir çubuk, Görsel Türü ayarı Doldurulmuş olarak belirlenmiş bir kullanıcı arayüzü görselidir. Bu ayar, Görsel'e bir Kaynak Görsel atandıktan sonra görünür; Hiçbiri seçiliyken Denetçi bu ayarı gizler. Doldurma Yöntemi Yatay ve Doldurma Başlangıcı Sol olarak ayarlandığında çubuk sol ucuna doğru küçülür; 0 ile 1 arasındaki fillAmount, çubuğun ne kadarının çizileceğini belirtir. Arkasındaki koyu renkli bir Görsel, boş kısmı gösterir. Unity, fillAmount değerini sınırlar; bu nedenle 1.4 tam dolu bir çubuk, -0.2 ise boş bir çubuk çizer.

fillAmount, kalan can miktarının oranıdır: can miktarının maksimum can miktarına bölümü. int alanlarında bu bir tamsayı bölmesidir ve 350 / 500 işleminin sonucu 0 olur; bu yüzden önce taraflardan birini float türüne dönüştürün. Image, UnityEngine.UI içinde bulunur. Bu boss çubuğu her vuruştan 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 miktarını yansıtabilir: bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); çubuk tamamen doluyken yeşildir ve boşaldıkça kırmızıya döner.

challenge icon

Görev

Kolay

Şövalyenin kalkanını ve sağlığını iki çubukta göster.

  1. ShowBars() yaz: shieldBar.fillAmount = (float)shield / maxShield; ve healthBar için de hp ve maxHp ile aynısını yap. Bunu Start() içinde çağır.
  2. TakeDamage içinde, kalkan Mathf.Min(amount, shield) kadar hasarı karşılar ve kalan miktar hp'den düşer; hp hiçbir zaman 0'ın altına inmez. Ardından ShowBars() çağır.

“Oyna” düğmesine bas ve dikenlerin üzerine yürü: önce kalkan çubuğu boşalır. Ardından “Kontrol et” düğmesine 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 değer 0'ın altına inmez. Ardından her iki çubuğu da göster.
    }
}

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

Kendi başına pratik yap: Unity playground