2015-02-10 40 views
0

我有一個繼承自Object的類Star。它有一個GameObject字段。 這裏是代碼:在內部方法中這是null,這怎麼可能?

public class Star : Object { 
    public GameObject starObject; 
    // code omitted 
} 

它,我使用的選擇的方法。

public void selectStar() { 

    Debug.Log ("Inside star selection"); 

    mapManager.selectionStarDidChange(this); 

    selected = true; 
} 

我有另一個腳本,我從中調用該方法,它檢測輸入。

public class StarObjectHandler : MonoBehaviour { 

    public Star starScript; 

     void OnMouseOver() 
    { 
     if (Input.GetMouseButtonDown(0)) { 
      Debug.Log ("Mouse registered star selection"); 
      starScript.selectStar(); 
     } 
    } 
} 

但是當我打電話的第一個方法,不知何故this變得null。我怎樣才能撥打null上的方法,他們的工作?

這裏有什麼問題?我查了二級starScript,這不是null

在日誌中,我得到「鼠標註冊..」,然後按照預期的方式「內部明星選擇」。

EDIT1:

這是越來越從這個調用的方法:

public void selectionStarDidChange(Star newlySelected) 
{ 
if (newlySelected) { 

    starSelector.transform.position = newlySelected.position; 

} else { 

    starSelector.transform.position = new Vector2(-10, -10); 
} 

if (lastSelectedStar) { 
    lastSelectedStar.deselectStar(); 
} 

if (lastSelectedShip) { 
    lastSelectedShip.deselectShip(); 
} 

lastSelectedStar = newlySelected; 
} 

它總是那張別的路線,並記錄在這裏說,newlySelected爲空。

EDIT2:

這裏的項目,如果有人感覺有興趣,看看有什麼是錯的: https://www.dropbox.com/s/napsqknlw3hjuku/Orion2.zip?dl=0

EDIT3:

我設法本地化錯誤此代碼:

Star star = new Star(); 
Debug.Log ("Is star null? __" + (star == null) + "__"); 

不知何故,這返回true,我將不得不查找對象實例化。

+1

你怎麼觀察到底有沒有問題'this'是'null'?很難從片段中知道發生了什麼 - 如果您可以提供一個簡短但完整的示例,則幫助您會更容易。它*有可能在C#中'this'等於null的實例方法中結束,但它通常需要一些有趣的委託創建。 – 2015-02-10 10:49:07

+0

@JonSkeet調試時,在mapManager上調用的方法也轉到參數爲null的分支。 – Dvole 2015-02-10 10:50:34

+0

它可能是一個意想不到的Mono行爲,因爲任何方法調用都很簡單,就像調用一個靜態地址的方法,將「this」作爲第一個參數。看起來Unity中使用的Mono可以讓你在某些情況下調用一個空對象的方法。 – 2015-02-10 10:56:22

回答

0

顯然問題是這段代碼返回null而不是對象。我不知道該程序的其餘部分如何處理這個爲空,我不明白爲什麼它返回null。

它是Object類的一個子類。我改變它沒有超類,它的工作。

Star star = new Star(); 
1

是您好像已經聲明的變量,無需進行指定

Star star = new Star(); 

將解決