Menu
CoddyTech

Komponen yang Hilang

Termasuk bagian Dasar-Dasar Scripting Unity dalam perjalanan Unity di Coddy. Pelajaran 45 dari 85.

Ketika komponen yang kamu minta tidak ada pada objek, GetComponent tidak menghentikanmu. Di Editor, metode ini mengembalikan pengganti yang dianggap sama dengan null, dan Unity memunculkan error saat pertama kali kodemu menggunakannya. Bola ini seharusnya melompat saat tombol Spasi ditekan, tetapi tidak ada yang memberinya Rigidbody:

Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        rb.AddForce(Vector3.up * 300f);
    }
}

Menekan Spasi menampilkan MissingComponentException: There is no 'Rigidbody' attached to the "Ball" game object, but a script is trying to access it. Pesan tersebut menyebutkan tipe yang tidak ada dan objeknya. Tambahkan komponen itu di Inspector atau, jika objek memang boleh tidak memilikinya, periksa terlebih dahulu. TryGetComponent(out rb) mengembalikan true dan mengisi rb jika komponennya ada, serta mengembalikan false tanpa error jika tidak ada (out memungkinkan method mengembalikan nilai melalui variabel):

bool canHop;

void Start()
{
    canHop = TryGetComponent(out rb);
}

Update() kemudian mendorong bola hanya if (canHop). Di luar Editor, dalam game yang sudah dibangun, GetComponent justru mengembalikan null biasa, sehingga kesalahan yang sama akan muncul di sana sebagai NullReferenceException.

challenge icon

Tantangan

Sedang

Lamp2 tidak memiliki Light: buat Space melewatinya, dan tunjukkan bahwa lampu itu rusak.

  1. Di Start(), ganti baris GetComponent dengan hasBulb = TryGetComponent(out bulb);, dengan field bool hasBulb;.
  2. Saat hasBulb bernilai false, ubah warna lampu: GetComponent<Renderer>().material.color = Color.gray;.
  3. Di Update(), alihkan lampu hanya saat hasBulb bernilai true.

Tekan tombol “Main” lalu tekan Space: lampu yang berfungsi akan menyala atau mati, tanpa error. Lalu tekan tombol “Periksa”.

Coba sendiri

using UnityEngine;

public class LampSwitch : MonoBehaviour
{
    Light bulb;

    void Start()
    {
        bulb = GetComponent<Light>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            bulb.enabled = !bulb.enabled;
        }
    }
}

Semua pelajaran di Dasar-Dasar Scripting Unity

Latihan sendiri: Playground Unity