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

this is null in the inside method, how is this even possible?

我有一个 class 继承自 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 上调用方法并且它们起作用?

这里有什么问题?我检查了第二个class中的starScript,它不是null

在日志中,我得到了 "Mouse registered..",然后是预期的 "Inside star selection"。

编辑 1:

这是由此调用的方法:

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;
}

它总是走 else 路线,这里的日志记录说 newlySelected 是空的。

编辑 2:

如果有人有兴趣查看问题所在,请查看以下项目: https://www.dropbox.com/s/napsqknlw3hjuku/Orion2.zip?dl=0

编辑 3:

我设法将错误定位到这段代码:

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

不知怎么的,这 returns 是真的,我将不得不查找对象实例化。

显然问题在于此代码返回了 null 而不是对象。我不知道程序的其余部分是如何处理这个为空的,我不明白为什么它 returns 为空。

它是对象 class 的子class。我把它改成了 no superclass 并且它起作用了。

Star star = new Star();

是的,看起来你已经声明了变量但没有分配它

Star star = new Star();

会解决问题