UnityEvents
Kelas Penting

Pengecualian Referensi Null

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%

Cek Null

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.

Try/Catch Blocks

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.

Summary

  • NullReferenceException terjadi ketika kode skrip Anda mencoba untuk menggunakan variabel yang tidak diatur (referencing) dan objek.
  • Pesan kesalahan yang muncul memberi tahu Anda banyak tentang di mana dalam kode masalah terjadi.
  • NullReferenceException dapat dihindari dengan menulis kode yang memeriksa untuk null sebelum mengakses objek, atau menggunakan blok mencoba/catch.
UnityEvents
Kelas Penting