Komponen yang Hilang
Termasuk bagian Dasar-Dasar Scripting Unity dalam perjalanan Unity di Coddy. Pelajaran 31 dari 67.
Saat komponen yang kamu minta tidak ada pada object, GetComponent tidak akan menghentikanmu. Di Editor, fungsi ini memberikan pengganti yang dianggap sama dengan null, dan Unity memunculkan error saat kodemu menggunakannya untuk pertama kali. Bola ini seharusnya melompat saat Space 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);
}
}Space 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 object-nya. Tambahkan komponen itu di Inspector atau, jika object memang sengaja tidak memilikinya, periksa terlebih dahulu. TryGetComponent(out rb) mengembalikan true dan mengisi rb saat komponen tersedia, serta mengembalikan false tanpa error saat komponen 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 di-build, GetComponent justru mengembalikan null biasa, sehingga kesalahan yang sama akan muncul sebagai NullReferenceException.
Tantangan
SedangTombol Space menyalakan dan mematikan lampu jalan, tetapi bohlam Lamp2 rusak: lampu itu tidak memiliki Light, dan menekan Space memicu MissingComponentException. Perbaiki skripnya:
- Lampu yang memiliki Light tetap menyala dan mati dengan tombol Space.
- Lampu tanpa Light tidak pernah mengaksesnya, jadi tidak terjadi error.
- Saat game dimulai, lampu tanpa Light memberi warna
Color.graypada bohlamnya, sehingga pemain bisa melihat bahwa bohlamnya rusak.
Tekan Play, lalu tekan Space untuk melihat error. Perbaiki, lalu tekan Check.
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;
}
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar Scripting Unity
1Skrip Pertamamu
Halo, UnityLetakkan KubusBergerak di Setiap FrameBerputar Setiap DetikKendalikan dengan TombolRingkasan: Kendarai Kubus4Vektor
Menjumlahkan VektorArahRuang Lokal dan DuniaKecepatan DiagonalJarak antara BendaVector3 adalah StructRingkasan: Pilot Drone7Proyek: Tangkap Bintang
Si PenangkapBintang Jatuh5Transformasi dan Hierarki
Objek Induk dan AnakSkalaMenghadap ke ObjekBergerak Menuju TitikRangkuman: Bulan yang Mengorbit6GameObject dan Komponen
Referensi di InspectorMendapatkan KomponenKomponen yang HilangMenambahkan KomponenRequireComponentTampilkan dan SembunyikanRangkuman: Sakelar Lampu