Menu
CoddyTech

Komponen yang Bekerja Bersama

Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 4 dari 64.

Komponen kecil tetap saling membutuhkan. Jetpack membutuhkan Fuel pada objek yang sama, jadi Jetpack menemukannya sekali di Awake, menyimpannya dalam field, lalu berkomunikasi dengannya melalui dua method publik kecil:

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))] membuat Unity menambahkan Fuel setiap kali Jetpack ditambahkan, melalui Editor atau dengan AddComponent, dan mencegah Fuel dihapus selama Jetpack masih ada. Unity memeriksanya hanya saat Jetpack ditambahkan, jadi Jetpack yang sudah ada pada objek sebelum kamu menulis atribut ini akan tetap menggunakan pengaturan lamanya. Awake adalah tempat untuk mengambilnya: method ini berjalan sekali, dan semua komponen milik objek sudah tersedia saat itu.

Jetpack tidak pernah mengubah amount sendiri. Fuel menentukan arti membakar, seperti memastikan nilainya tidak pernah turun di bawah 0, dan Jetpack hanya memintanya. Jika nanti Fuel menampilkan pengukur atau mengisi ulang dari pickup, Jetpack tidak perlu diubah.

challenge icon

Tantangan

Mudah

Buat dash skater menghabiskan stamina.

  1. Di Stamina, tambahkan public bool TrySpend(float cost): jika current setidaknya sebesar cost, kurangi current sebesar nilai itu dan kembalikan true, jika tidak, kembalikan false.
  2. Letakkan [RequireComponent(typeof(Stamina))] di atas public class Dash, lalu ambil komponen itu ke dalam sebuah field di Awake().
  3. Saat tombol Space ditekan, lakukan dash hanya jika TrySpend(cost) bernilai true; jika tidak, catat Too tired.

Tekan tombol “Main”: setelah dua kali dash, Console menampilkan Too tired. Lalu tekan tombol “Periksa”.

Coba sendiri

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;
        }
    }
}

Semua pelajaran di Arsitektur Game di Unity

Latihan sendiri: Playground Unity