Unity对象引用+序列化字段。我错过了什么?

时间:2016-08-16 22:26:27

标签: c# unity3d nullreferenceexception

我有一个名为“攻击按钮”的ui按钮。我有一个名为HeroBattleController的脚本附加到我的Gameobject上。我将攻击按钮设置为序列化字段,并在编辑器中删除脚本上的攻击按钮对象。

[SerializeField]
private Button AttackButton;

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

尝试访问它会给我带来错误NullReferenceException:对象引用未设置为对象的实例

我认为将对象放在编辑器中可以让我访问它而无需“查找”对象。有人能指出我正确的方向吗?

enter image description here

错误在行

AttackButton.interactable=status;

完成HeroBattleController脚本

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() {

    }
}

通过heroprefab对象的onClick调用HeroTouch。

更新:我将herobattlecontroller脚本附加到两个对象,即场景根部的游戏对象和heroprefab对象。我从游戏对象中删除了它,只在预制件上有它。但是现在当我将攻击按钮拖到预制件上的脚本部分时它保持粗体,当我运行游戏时,攻击按钮引用消失了。我可以将按钮拖动到正在运行的对象,它按照我的预期运行。我在对象层次结构和对象可用的位置之间的连接上显然遗漏了一些东西。将英雄战斗控制器脚本放在根游戏对象上的行为方式与其粗体相同,并且在运行时它缺少链接。

编辑期间的层次结构

enter image description here

运行期间的层次结构

enter image description here

1 个答案:

答案 0 :(得分:1)

HeroBattleController是否附加到预制件上? AttackButton是否在同一预制件上?如果不是那么就有问题了。