Birlikte Çalışan Bileşenler
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 4 / 64.
Küçük bileşenlerin de birbirine ihtiyacı vardır. Jetpack'in aynı nesnedeki Fuel'e ihtiyacı vardır; bu yüzden Awake içinde Fuel'i bir kez bulur, bir alanda saklar ve iki küçük genel yöntem aracılığıyla onunla 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))], Jetpack eklendiğinde (Editor'da veya AddComponent ile) Unity'nin bir Fuel eklemesini sağlar ve Jetpack nesnedeyken bu Fuel'in kaldırılmasını engeller. Unity bunu yalnızca Jetpack eklendiği anda kontrol eder; bu nedenle özniteliği yazmadan önce nesneye eklenmiş olan bir Jetpack, eski kurulumunu korur. Bileşeni almak için doğru yer Awake'tir: bu yöntem bir kez çalışır ve o zamana kadar nesnenin kendi bileşenlerinin tümü hazır olur.
Jetpack, amount değerini asla kendisi değiştirmez. Yakıtın 0'ın altına düşmemesi gibi yanmanın ne anlama geldiğine Fuel karar verir; Jetpack ise yalnızca istekte bulunur. Fuel daha sonra bir gösterge gösterse veya toplanan nesnelerle yeniden doldurulsa bile Jetpack'in değişmesi gerekmez.
Görev
KolayPatencinin atılma hareketi dayanıklılık harcasın.
Staminaiçinepublic bool TrySpend(float cost)ekle:current,costkadar veya daha fazlaysa bu değeri düşür vetruedöndür; aksi hâldefalsedöndür.[RequireComponent(typeof(Stamina))]ifadesinipublic class Dashsatırının üstüne ekle ve bileşeniAwake()içinde bir alana al.- Space tuşuna basıldığında yalnızca
TrySpend(cost)true ise atıl; aksi hâldeToo tiredmesajını günlüğe yaz.
“Oyna” düğmesine bas: iki atılma hareketinden sonra Console'da Too tired yazar. Ardından “Kontrol et” düğmesine 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;
}
}
}
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Kalıtım Değil, Bileşenler
Küçük BileşenlerTemel Düşman Script'iSoyut BileşenlerBirlikte Çalışan BileşenlerTekrar: Modüler TaretTekrar: Çift Namlulu Top4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larTekrar: Ganimet TablosuTekrar: Ganimeti At2Unity'de Arayüzler
IDamageableArayüzler ve TryGetComponentGetComponentsÖzet: Etkileşim TuşuÖzet: Erişim Mesafesindeki En Yakın5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriOrtak AyarlarRüzgârı KaydetVeri Olarak DalgalarTekrar: Eşya VeritabanıTekrar: Dükkândan Satın Al8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearestKendi başına pratik yap: Unity playground