这在内部方法中为null,这怎么可能呢?

时间:2015-02-10 10:45:25

标签: c# unity3d

我有一个继承自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,我将不得不查找对象实例化。

2 个答案:

答案 0 :(得分:1)

是看起来你已声明变量而未指定它

Star star = new Star();

将解决问题

答案 1 :(得分:0)

显然问题是此代码返回null而不是对象。我不知道程序的其余部分如何处理为null,我无法理解为什么它返回null。

它是Object类的子类。我把它改成了没有超类,它起作用了。

Star star = new Star();