我有一个继承自Object的Star类。它有一个GameObject字段。 这是代码:
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为null。
EDIT2:
如果有人感到有兴趣看到错误的话,这是项目: https://www.dropbox.com/s/napsqknlw3hjuku/Orion2.zip?dl=0
EDIT3:
我设法将错误本地化为此代码:
Star star = new Star();
Debug.Log ("Is star null? __" + (star == null) + "__");
不知怎的,这会返回true,我将不得不查找对象实例化。
答案 0 :(得分:1)
是看起来你已声明变量而未指定它
Star star = new Star();
将解决问题
答案 1 :(得分:0)
显然问题是此代码返回null而不是对象。我不知道程序的其余部分如何处理为null,我无法理解为什么它返回null。
它是Object类的子类。我把它改成了没有超类,它起作用了。
Star star = new Star();