2016-09-17 176 views
0

我想在TileController腳本中發生放置事件時使用PlayerController腳本中的方法實例化預製件。Unity C# - 實例化調用方法的預製

如果我在TileController使用:

public void OnDrop (PointerEventData eventData){ 
    GameObject instance = Instantiate(Resources.Load("Player", typeof(GameObject))) as GameObject; 
} 

預製加載正確的身影。

但是,如果使用:

public void OnDrop (PointerEventData eventData){ 
    player.instantiatePlayer(); 
} 

然後返回一個錯誤:

NullReferenceException: Object reference not set to an instance of an object 

的的PlayerController方法,我使用的是:

public void instantiatePlayer() {  
    GameObject instance = Instantiate(Resources.Load("Player", typeof(GameObject))) as GameObject; 
} 

我覺得這件事情真的簡單的我很想念,但我無法確定它是什麼。

回答

0

你的控制器類有一個名爲「player」的成員,但它沒有設置任何內容,它是空的,這就是你得到一個NullReferenceException的原因。你做的第一個方法是正確的。

+0

在TileController類中我有:\t 'private PlayerController player; (){ \t player = GetComponent (); }' – Aeross

+0

確保運行此腳本的GameObject具有附加的PlayerController。如果不是,則添加一個。如果它的確如此,那麼null引用就在你的PlayerController.instantiatePlayer方法中的某個地方,因此使用Visual Studio Tools for Unity擴展將Visual Studio附加到Unity,在該代碼行上放置一條分隔線,然後進入它以查看空引用的位置是。如果你點擊它,控制檯窗口還應該向你顯示異常的調用堆棧(如果我沒有記錯的話) –

0

當你評論彼得的帖子。 首先在Start函數中檢查是否引用「player」等於null。 GetComponent只是試圖獲取組件,但如果它找不到它將返回null。

如果它不爲空,那麼檢查一下,也許在某些代碼中你會在玩家引用下銷燬對象。