C# 使用Unity.5.6.5和脚本引用的NullReferenceException

C# 使用Unity.5.6.5和脚本引用的NullReferenceException,c#,unity3d,monodevelop,C#,Unity3d,Monodevelop,在我遇到的问题中有3个脚本在起作用 首先,我有一个对象,我用它来选择下面的代码与“GameManager”(secound relavent对象)通信,它就是这个工作的所选对象: public void OnMouseDown () { if(TheGameManager.SelectableOn || TheGameManager.SelectedObject == this){ //If clicked and not already selected then det

在我遇到的问题中有3个脚本在起作用

首先,我有一个对象,我用它来选择下面的代码与“GameManager”(secound relavent对象)通信,它就是这个工作的所选对象:

public void OnMouseDown ()
{
    if(TheGameManager.SelectableOn || TheGameManager.SelectedObject == this){



    //If clicked and not already selected then determain this as the selected object
    OnOff = !OnOff;
    if(FindObjectOfType<GameManager>().SelectedObject != this){OnOff = true;}
    if(FindObjectOfType<GameManager>().SelectedObject == null){OnOff = true;}

    //Determain this as the selected object
    if(OnOff){FindObjectOfType<GameManager>().SelectedObject = this; TheGameManager.UpdateZUIInterface("close");}
        else{FindObjectOfType<GameManager>().SelectedObject = null;TheGameManager.ResetAllUIToDefault();}

    TheGameManager.UpdateAllUIElements();
    }
public void OnMouseDown()
{
if(游戏管理器.SelectableOn | |游戏管理器.SelectedObject==此){
//如果已单击但尚未选定,则将其确定为选定对象
OnOff=!OnOff;
如果(FindObjectOfType().SelectedObject!=this){OnOff=true;}
如果(FindObjectOfType().SelectedObject==null){OnOff=true;}
//将其确定为选定对象
如果(OnOff){FindObjectOfType().SelectedObject=this;则GameManager.UpdateZUIInterface(“close”);}
else{FindObjectOfType().SelectedObject=null;TheGameManager.ResetAllUIToDefault();}
GameManager.UpdateAllUIElements();
}
这是检查员的样子 但是,当我尝试引用GameManager中安全的这个实例时,问题就出现了

[SerializeField] GameManager TheGameManager;

public void OnMouseDown (){

    Selectable SelectedObject = TheGameManager.ProvideSelectedObject();
    Debug.Log(SelectedObject.gameObject);
    Debug.Log(TheGameManager.SelectedObject.GetComponent<Selectable>().gameObject);


}
[SerializeField]游戏管理器游戏管理器;
在mousedown()上的公共void{
可选SelectedObject=游戏管理器。提供取消对象();
Log(SelectedObject.gameObject);
Log(GameManager.SelectedObject.GetComponent().gameObject);
}
这两种访问实例的方法都不起作用。我可以想象,从实例本身发送的直接引用会起作用,但是我尝试使用GameManager作为大多数常用变量的中央存储,所以我希望避免这样做。你们有什么解决方案或想法吗?
我很想听到你的消息。

如果
游戏管理器
设置为单例,那么它很可能有一个静态
实例
属性或字段。在这种情况下,你应该调用静态
isntance
字段,而不是
游戏管理器
的本地实例

因此,删除: [序列化字段]游戏管理器游戏管理器

现在像这样给游戏经理打电话:

varSelectedObject = TheGameManager.instance.ProvideSelectedObject();

这是假设,但我敢说这是你问题的原因。如果不是这样,我们需要查看
游戏管理器的实际代码

什么是
OnOff
?亲爱的上帝,请停止调用
FindObjectOfType()
。如果必须使用find,请使用一次并缓存它。但更好的做法是根本不使用它,并在Inspector中预先定义对象。