常用解決辦法NullReferenceException:Object

來源:酷知科普網 2.33W

本文介紹一些常見的導致NullReferenceException: Object reference not set to an instance of an object錯誤出現的原因,並給出相應的解決辦法

操作方法

(01)常用解決辦法1:NullReferenceException: Object reference not set to an instance of an object.沒有初始化物體的原因最主要的一個就是:物體本身的活性沒有啟用(√被去掉了).你首先要檢視,GameObject的活性是否在執行前就沒有啟用,還是程式執行時你的某些指令碼導致程式執行時將它的活性取消了,啟用活性此問題迎刃而解.第一張圖為簡單的場景搭建,便於講解.

常用解決辦法NullReferenceException:Object
常用解決辦法NullReferenceException:Object 第2張

(02)常用解決辦法2:出現問題的物體的父物體、父父物體、父父父物體......沒有啟用活性,因為一個父物體的活性取消的話,unity系統預設的就無法搜尋到他的所有自物體了,即使這個時候你單獨開啟自物體的屬性面板,發現子物體的活性小勾√還在,這個自物體依然是 Object reference not set to an instance of an object.

常用解決辦法NullReferenceException:Object 第3張
常用解決辦法NullReferenceException:Object 第4張

(03)常用解決辦法3:如果帶有Start(),Awake(),Update (),函式的指令碼沒有賦給Hierarchy面板上的任何GameObject,那這三個函式的函式體全部不會被執行,自然也就會導致這個問題了.指令碼在Project面板中建立後,如果你以為系統會自動執行它,你就大錯特錯了,必須要把它放到Hierarchy面板上才行.有兩種方法1.給一個已有的GameObject新增元件,即Add Component-"指令碼的名字".2.新建一個空的GameObject,在空物體上新增元件,方法同上

常用解決辦法NullReferenceException:Object 第5張

(04)常用解決辦法4:在大一點的工程中,你會發現,一個工程中的絕大多數指令碼是沒有Start(),Awake(),Update ()函式的,這些指令碼或是也賦值給Hierarchy面板上的物體(這隻佔很少的一部分),或通過被其他指令碼呼叫來實現作用(佔了絕大多數!!),如果這些指令碼中出現Object reference not set to an instance of an object,你就要去看看源頭了,看看呼叫的指令碼有沒有執行(也就是有沒有被放到Hierarchy面板上的某個物體上,而且這個指令碼元件的活性√是否還在)

(05)常用解決辦法4:函式應用不當導致的錯誤.你自以為指令碼邏輯正確(實際上也確實正確啊),的的確確是有給物體賦值,但就是報錯Object reference not set to an instance of an object.例如,objButton = antiate(("Prefab/FirstButton")) as GameObject;語法沒錯,函式呼叫正確,但是就是報錯,說objButton沒有賦初值,錯誤到底在哪呢!原來系統找不到載入路徑裡面的東西!,去看看你的資源放在哪裡了,是不是放在Assets-Resources檔案夾下面了,注意檔名"Resources"絕對不能錯哦,因為這個函式就是找這個名字下面的資源啊!然後就在檢查一下路徑有沒有錯就OK了

(06)常用解決辦法4:真的是犯錯了,沒有賦初值,那就趕緊賦初值吧.介紹幾種簡單的賦初值方法:(1)public Vector3 vec3=new Vector3(0,0,0);(2)public string[] strs = new string[5];(3)int Int = 0;(4)float Flo = 0.0f;

常用解決辦法NullReferenceException:Object 第6張
熱門標籤