当我的变量在" awake"中被实例化时,为什么我得到NullReferenceException?方法?

时间:2015-04-06 20:38:24

标签: c# unity3d

当我点击卡片时,我不断收到此错误,因此我可以移动它。

  

NullReferenceException:未将对象引用设置为对象的实例   CardProspector.OnMouseUpAsButton()(在Assets / __ Scripts / CardProspector.cs:17)   UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32,Int32)

该异常表示我的CardProspector类中的以下方法:

override public void OnMouseUpAsButton() {
    Prospector.S.CardClicked(this);  // line 17
    base.OnMouseUpAsButton();
}

但是该变量应该由我的Prospector类实例化,其相关部分如下所示:

public class Prospector : MonoBehaviour {
    static public Prospector S;
    ...
    ...

    // Use this for initialization
    void awake() {
        S = this;
    }

    ...
    ...
}

2 个答案:

答案 0 :(得分:3)

Awake()区分大小写,永远不会在您的代码中调用。

答案 1 :(得分:0)

这部分信息可以解决问题所在:

(at Assets/__Scripts/CardProspector.cs:17)

“:17”表示CardProspector.cs文件的第17行,转换为以下行:

Prospector.S.CardClicked(this);

这表明静态属性“S”为空 - 它尚未定义。

由于“S”是在方法Awake()中定义的,因此您需要在以任何方式引用属性“S”之前调用Awake()。