C# 统一对象引用+;序列化字段。我错过了什么?

C# 统一对象引用+;序列化字段。我错过了什么?,c#,unity3d,nullreferenceexception,C#,Unity3d,Nullreferenceexception,我有一个叫做“攻击按钮”的ui按钮。我有一个名为HeroBattleController的脚本连接到我的游戏对象。我将一个攻击按钮设置为序列化字段,并将攻击按钮对象放置在编辑器中的脚本上 [SerializeField] private Button AttackButton; public void SetButtonStatus(bool status) { AttackButton.interactable=status; } 尝试访问时出现错误NullReferenceExc

我有一个叫做“攻击按钮”的ui按钮。我有一个名为HeroBattleController的脚本连接到我的游戏对象。我将一个攻击按钮设置为序列化字段,并将攻击按钮对象放置在编辑器中的脚本上

[SerializeField]
private Button AttackButton;

public void SetButtonStatus(bool status) {
    AttackButton.interactable=status;
}
尝试访问时出现错误NullReferenceException:对象引用未设置为对象的实例

我认为将对象放入编辑器将允许我访问它,而无需“查找”对象。谁能给我指出正确的方向吗

错误在线路上

AttackButton.interactable=status;
完整的控制器脚本

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class HeroBattleController: MonoBehaviour {

    public static string SelectedHero;

    [SerializeField]
    private Button AttackButton;

    public void SetButtonStatus(bool status) {
        AttackButton.interactable=status;

    }

    public void HeroTouch() {
        Debug.Log("Hero was touched: "+this.name);

        SetButtonStatus(false);
    }

    // Use this for initialization
    void Start() {

    }

    // Update is called once per frame
    void Update() {

    }
}
HeroTouch是从heroprefab对象通过onClick调用的

更新:我将herobattlecontroller脚本附加到两个对象上,一个是场景根的游戏对象,另一个是heroprefab对象。我将其从游戏对象中移除,并且仅将其放在预制件上。但是现在,当我将攻击按钮拖动到预置上的脚本部分时,它将保持粗体,当我运行游戏时,攻击按钮引用将消失。我可以将按钮拖动到正在运行的对象上,它的功能与我预期的一样。很明显,我在对象层次结构和对象可用位置之间的联系上遗漏了一些东西。将英雄战斗控制器脚本放在根游戏对象上只会以相同的方式操作,这意味着它是粗体的,运行时会丢失链接

编辑过程中的层次结构

运行时的层次结构


控制器是否连接到预制件?攻击按钮是否在同一预制板上?如果没有,则会出现问题。

“尝试访问时出现错误NullReferenceException:对象引用未设置为对象的实例”哪行代码导致了错误?双击Console选项卡上的错误,Unity将显示导致该错误的原因。我认为你问题中的代码没有问题。错误在AttackButton上。Interactiable=status;这应该行得通。可能是链接错误。从编辑器中将
按钮重新拖动到
攻击按钮
插槽。如果这样做没有解决问题,请说明如何调用
SetButtonStatus
函数。编辑您的问题并将完整的脚本放入
controller
。另外,将调用
SetButtonStatus
函数的完整脚本放在哪里。这将有助于确定问题。HeroBattleController已连接到预置,但我无法保持攻击按钮的连接。如果我尝试将其附加到项目中的预制件上,我会得到no符号,如果我将其附加到场景中已经存在的预制件上,它就会消失。预设对象创建Hero1到Hero5。你只能放入同样是预置的对象吗?如果预置依赖于某个东西,那么它应该在预置内。