Sebuah NullReferenceException
terjadi ketika Anda mencoba untuk mengakses variabel referensi yang tidak merujuk pada objek apa pun. Jika variabel referensi tidak merujuk objek, maka akan diperlakukan sebagai null
. Waktu berjalan akan memberi tahu Anda bahwa Anda mencoba mengakses objek, ketika variabel adalah null
dengan mengeluarkan NullReferenceException
.
variabel referensi dalam c # dan JavaScript mirip dengan konsep untuk pointer di C dan C++. Jenis referensi default untuk null
untuk menunjukkan bahwa mereka tidak merujuk objek apa pun. Oleh karena itu, jika Anda mencoba dan mengakses objek yang direferensikan dan tidak ada satu, Anda akan mendapatkan NullReferenceException
.
Ketika Anda mendapatkan NullReferenceException
dalam kode Anda berarti bahwa Anda telah lupa untuk mengatur variabel sebelum menggunakannya. Pesan kesalahan akan terlihat seperti:
NullReferenceException: Object reference not set to an instance of an object
at Example.Start () [0x0000b] in /Unity/projects/nre/Assets/Example.cs:10
Pesan kesalahan ini mengatakan bahwa NullReferenceException
terjadi pada baris 10 dari file script Example.cs
. Juga, pesan mengatakan bahwa pengecualian terjadi di dalam fungsi Start()
. Ini membuat Pengecualian Referensi Null mudah ditemukan dan diperbaiki. Dalam contoh ini, kode adalah:
//c# example
using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour {
// Use this for initialization
void Start () {
__GameObject__The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject's functionality is defined by the Components attached to it. [More info](class-GameObject.html)<span class="tooltipGlossaryLink">See in [Glossary](Glossary.html#GameObject)</span> go = GameObject.Find("wibble");
Debug.Log(go.name);
}
}
Kode hanya terlihat untuk objek permainan yang disebut “wibble”. Dalam contoh ini tidak ada objek permainan dengan nama itu, sehingga fungsi Find()
kembali null
. Di garis berikutnya (line 9) kami menggunakan variabel go
dan mencoba dan mencetak nama objek permainan itu referensi. Karena kita mengakses objek permainan yang tidak ada run-time memberi kita ruang NullReferenceException
%
Meskipun dapat frustrasi ketika ini terjadi hanya berarti script perlu lebih berhati-hati. Solusi dalam contoh sederhana ini adalah untuk mengubah kode seperti ini:
using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour {
void Start () {
GameObject go = GameObject.Find("wibble");
if (go) {
Debug.Log(go.name);
} else {
Debug.Log("No game object called wibble found");
}
}
}
Sekarang, sebelum kami mencoba dan melakukan apa pun dengan variabel go
, kami memeriksa untuk melihat bahwa itu tidak null
. Jika null
, maka kita menampilkan pesan.
Penyebab lain untuk NullReferenceException
adalah untuk menggunakan variabel yang harus diinisialisasi dalam InspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
Lihat di Glossary. Jika Anda lupa melakukan ini, maka variabel akan null
. Cara yang berbeda untuk berurusan dengan NullReferenceException
adalah menggunakan blok coba/catch. Sebagai contoh, kode ini:
using UnityEngine;
using System;
using System.Collections;
public class Example2 : MonoBehaviour {
public Light myLight; // set in the inspector
void Start () {
try {
myLight.color = Color.yellow;
}
catch (NullReferenceException ex) {
Debug.Log("myLight was not set in the inspector");
}
}
}
Dalam contoh kode ini, variabel yang disebut myLight
adalah Light
yang harus diatur di jendela Inspektur. Jika variabel ini tidak diatur, maka akan default ke null
. Tempting untuk mengubah warna cahaya dalam blok try
menyebabkan NullReferenceException
yang diambil oleh blok catch
. Blok catch
menampilkan pesan yang mungkin lebih membantu seniman dan desainer game, dan mengingatkan mereka untuk mengatur cahaya dalam inspektur.
NullReferenceException
terjadi ketika kode skrip Anda mencoba untuk menggunakan variabel yang tidak diatur (referencing) dan objek.NullReferenceException
dapat dihindari dengan menulis kode yang memeriksa untuk null
sebelum mengakses objek, atau menggunakan blok mencoba/catch.