Menu
CoddyTech

Komponen Kecil

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

GameObject adalah daftar komponen, dan setiap script yang kamu tulis menjadi salah satunya. Game Unity dibuat dengan memberi setiap script satu tugas, lalu memasang beberapa script pada sebuah object. Gerakan, tembakan, dan poin nyawa pemain bisa ditangani oleh satu PlayerController, tetapi jika dijadikan tiga komponen, Mover, Shooter, dan Health, masing-masing juga bisa dipasang pada object lain:

public class Health : MonoBehaviour
{
    public int hp = 3;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        if (hp <= 0)
        {
            Destroy(gameObject);
        }
    }
}
  • Pemain: Mover, Shooter, Health
  • Turret: Shooter, Health
  • Peti: Health

Dengan class C# biasa, kamu mungkin akan membuat hierarki pohon: Character, lalu ShootingCharacter : Character, lalu Player : ShootingCharacter. Turret menembak, tetapi tidak pernah berjalan, sedangkan peti hanya hancur, jadi setiap jenis object baru mengharuskanmu merombak hierarki pohon tersebut. Dengan komponen, jenis object baru adalah kombinasi baru dari script yang sudah ada, yang disusun di Inspector, dan setiap script dapat memiliki nilainya sendiri di sana: Mover yang lambat pada satu object, dan Mover yang cepat pada object lain.

Komponen pada satu object menggunakan Transform yang sama, jadi masing-masing hanya boleh mengubah bagian yang menjadi tanggung jawabnya. Mover yang menambahkan nilai ke x dan z dengan transform.position += tidak mengubah y, sehingga Jumper pada object yang sama tetap bisa mengubah ketinggian. Mover yang menetapkan seluruh posisi ke new Vector3(x, 0.5f, z) akan mengembalikan y ke nilai sebelumnya setiap frame dan membatalkan lompatan.

challenge icon

Tantangan

Mudah

Pisahkan Boat.cs agar setiap skrip mengerjakan satu tugas.

  1. Pindahkan gerakan naik turun ke Bobber: atur startY di Start(), gerakan naik turun di Update(), dengan height dan speed miliknya sendiri.
  2. Pindahkan kedipan ke Blinker, dengan timer sendiri.
  3. Hapus kedua tugas dan field-nya dari Boat, agar hanya mengendalikan kemudi.

Tekan tombol “Main”: bebek bergerak naik turun, pelampung berkedip, dan perahu dikendalikan. Lalu tekan tombol “Periksa”.

Coba sendiri

using UnityEngine;
using UnityEngine.InputSystem;

// Satu skrip, tiga tugas: mengarahkan, mengayun, dan berkedip.
public class Boat : MonoBehaviour
{
    public float speed = 3f;
    public float bobHeight = 0.1f;
    public float bobSpeed = 2f;
    public Renderer lamp;
    public float blinkInterval = 0.5f;

    private InputAction moveAction;
    private float startY;
    private float blinkTimer;

    void Start()
    {
        moveAction = InputSystem.actions.FindAction("Move");
        startY = transform.position.y;
    }

    void Update()
    {
        // mengarahkan
        Vector2 input = moveAction.ReadValue<Vector2>();
        transform.position += new Vector3(input.x, 0f, input.y) * speed * Time.deltaTime;

        // mengayun
        Vector3 p = transform.position;
        p.y = startY + Mathf.Sin(Time.time * bobSpeed) * bobHeight;
        transform.position = p;

        // berkedip
        blinkTimer += Time.deltaTime;
        if (blinkTimer >= blinkInterval)
        {
            blinkTimer -= blinkInterval;
            lamp.enabled = !lamp.enabled;
        }
    }
}

Semua pelajaran di Arsitektur Game di Unity

Latihan sendiri: Playground Unity