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.
Tantangan
SedangLamp2 tidak memiliki Light: buat Space melewatinya, dan tunjukkan bahwa lampu itu rusak.
- Di
Start(), ganti barisGetComponentdenganhasBulb = TryGetComponent(out bulb);, dengan fieldbool hasBulb;. - Saat
hasBulbbernilai false, ubah warna lampu:GetComponent<Renderer>().material.color = Color.gray;. - Di
Update(), alihkan lampu hanya saathasBulbbernilai 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
1Dasar-Dasar C# di Unity
Halo, UnityVariabelDesimal Memerlukan fTeks di ConsoleVariabel yang Menyimpan NilaiIf dan ElseBandingkan AngkaUlasan: Pengumpul Koin7Perulangan dan method
Ulangi dengan forPerulangan di dalam perulanganTulis methodMethod yang Mengembalikan NilaiarrayUlasan: Tangga10Menemukan Benda
Cari Berdasarkan NamaTagCari Berdasarkan TipeReferensi Lebih Baik daripada FindNull di UnityRangkuman: Koin Terdekat13Proyek: Hindari Balok
Karakter PelariBalok dari Langit2Buat Bergerak
Tempatkan KubusBergerak Setiap FrameBerputar Setiap DetikKemudikan dengan TombolRangkuman: Kemudikan Kubus5Vektor
Menjumlahkan VektorArahRuang Lokal dan DuniaKecepatan DiagonalJarak AntarobjekVector3 adalah StructRangkuman: Pilot Drone8GameObjects dan Komponen
Referensi di InspectorAmbil KomponenKomponen yang HilangTambahkan KomponenRequireComponentTampilkan dan SembunyikanRingkasan: Sakelar Lampu6Transformasi dan Hierarki
Objek Induk dan AnakKibarkan BenderaSkalaMelihat BendaBergerak Menuju TitikRekap: Bulan yang MengorbitLatihan sendiri: Playground Unity