Birlikte Çalışan Bileşenler
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 4 / 50.
Küçük bileşenler de birbirine ihtiyaç duyar. Jetpack'in aynı nesnede Fuel'e ihtiyacı vardır; bu yüzden Fuel'i Awake içinde bir kez bulur, bir alanda saklar ve onunla iki küçük public yöntem aracılığıyla iletişim kurar:
public class Fuel : MonoBehaviour
{
public float amount = 10f;
public bool IsEmpty()
{
return amount <= 0f;
}
public void Burn(float units)
{
amount = Mathf.Max(amount - units, 0f);
}
}[RequireComponent(typeof(Fuel))]
public class Jetpack : MonoBehaviour
{
public float lift = 4f;
private Fuel fuel;
void Awake()
{
fuel = GetComponent<Fuel>();
}
void Update()
{
if (Keyboard.current.spaceKey.isPressed && !fuel.IsEmpty())
{
fuel.Burn(Time.deltaTime);
transform.position += Vector3.up * lift * Time.deltaTime;
}
}
}[RequireComponent(typeof(Fuel))], Editor'de veya AddComponent ile bir Jetpack eklendiğinde Unity'nin bir Fuel eklemesini sağlar ve Jetpack oradayken bu Fuel'in kaldırılmasını engeller. Unity bunu yalnızca Jetpack'in eklendiği anda kontrol eder; bu nedenle özniteliği yazmadan önce bir nesnede zaten bulunan Jetpack, eski kurulumunu korur. Onu almak için doğru yer Awake'tir: Bir kez çalışır ve o zamana kadar nesnenin kendi bileşenlerinin tümü orada olur.
Jetpack, amount değerini kendisi asla değiştirmez. Yakıtın 0'ın altına düşmesini engellemek gibi, yakmanın ne anlama geldiğine Fuel karar verir; Jetpack ise yalnızca istekte bulunur. Fuel daha sonra bir gösterge sunar veya toplanan nesnelerden yakıt doldurursa Jetpack'te değişiklik gerekmez.
Görev
KolayKız patencinin atılımı ücretsiz: Space tuşuna her bastığında onu 3 birim ileri (+z) fırlatıyor. Bunu dayanıklılığa mal olacak şekilde ayarla. Ok tuşları onu kaydırıyor (Mover.cs hazır) ve Stamina.cs, current değerini saniyede regen kadar, max değerine (100) kadar yeniliyor.
- Stamina'ya genel bir
bool TrySpend(float cost)metodu ekle.currenten azcostisecostmiktarınıcurrentdeğerinden çıkar vetruedöndür; aksi takdirdecurrentdeğerini olduğu gibi bırak vefalsedöndür. - Dash'in nesnesinde bir Stamina bulunmasını zorunlu kıl; böylece Dash eklendiğinde Unity de bir tane ekler. Awake sırasında bir kez alıp bir alana ata.
- Bir atılım
costkadar dayanıklılığa mal olur (Inspector bunu 40 olarak ayarlar). Space tuşu yalnızca TrySpend onay verirse atılım yapar; aksi takdirdeToo tiredmesajını günlüğe kaydeder.
Play'e bas ve patenci çok yorulana kadar atılım yap, ardından Check'e bas.
Kendin dene
using UnityEngine;
using UnityEngine.InputSystem;
public class Dash : MonoBehaviour
{
public float distance = 3f;
public float cost = 40f;
void Update()
{
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
transform.position += Vector3.forward * distance;
}
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Hiyerarşiler Değil, Bileşenler
Küçük BileşenlerTemel Bir Düşman BetiğiSoyut BileşenlerBirlikte Çalışan BileşenlerÖzet: Modüler Taret4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larÖzet: Ganimet Tablosu7Durum Makineleri
Sınıflar Olarak DurumlarBir Durum MakinesiGeçişlerDüşmanların Yapay ZekâsıTekrar: Kapı Durumları10Proje: Arena Hayatta Kalma
KahramanDüşman Türleri5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriPaylaşılan AyarlarVeri Olarak DalgalarTekrar: Eşya Veritabanı8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearest