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();
会解决问题
我有一个 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();
会解决问题