我有一個繼承自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,我將不得不查找對象實例化。
你怎麼觀察到底有沒有問題'this'是'null'?很難從片段中知道發生了什麼 - 如果您可以提供一個簡短但完整的示例,則幫助您會更容易。它*有可能在C#中'this'等於null的實例方法中結束,但它通常需要一些有趣的委託創建。 – 2015-02-10 10:49:07
@JonSkeet調試時,在mapManager上調用的方法也轉到參數爲null的分支。 – Dvole 2015-02-10 10:50:34
它可能是一個意想不到的Mono行爲,因爲任何方法調用都很簡單,就像調用一個靜態地址的方法,將「this」作爲第一個參數。看起來Unity中使用的Mono可以讓你在某些情況下調用一個空對象的方法。 – 2015-02-10 10:56:22