Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Patencinin atılma hareketi dayanıklılık harcasın.

  1. Stamina içine public bool TrySpend(float cost) ekle: current, cost kadar veya daha fazlaysa bu değeri düşür ve true döndür; aksi hâlde false döndür.
  2. [RequireComponent(typeof(Stamina))] ifadesini public class Dash satırının üstüne ekle ve bileşeni Awake() içinde bir alana al.
  3. Space tuşuna basıldığında yalnızca TrySpend(cost) true ise atıl; aksi hâlde Too tired mesajı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

Kendi başına pratik yap: Unity playground