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 / 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.

challenge icon

Görev

Kolay

Kı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. current en az cost ise cost miktarını current değerinden çıkar ve true döndür; aksi takdirde current değerini olduğu gibi bırak ve false dö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 cost kadar dayanıklılığa mal olur (Inspector bunu 40 olarak ayarlar). Space tuşu yalnızca TrySpend onay verirse atılım yapar; aksi takdirde Too tired mesajı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;
        }
    }
}
quiz iconKendini test et

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