无法访问自定义类

时间:2016-06-02 00:01:05

标签: unity3d

在统一中,我不断收到错误消息“NullReferenceException:Object reference not set to a object of object”:

listOfBanks [0] .Deposit(50);

accntBlnce.text =“帐户余额:\ n”+ listOfBanks [curBank] .GetBalance()。ToString(“c”);

我在下拉菜单中列出了3个选项,当我调试时。记录数组中的项目数量,我得到3作为我的计数。但我不能对他们做任何事情。 banks变量在检查器中设置为Dropdown对象,在面板中设置为accntBlnce作为文本对象。

代码如下。

Banks.cs

public class Banks : MonoBehaviour {

    public Dropdown banks;
    public Text accntBlnce;
    public Bank[] listOfBanks;
    public int curBank = 0;

    void Start() {
        listOfBanks = new Bank[banks.options.Count];
        listOfBanks[0].Deposit(50);
    }

    void Update() {
        curBank = banks.value;
        accntBlnce.text = "Account Balance:\n" + listOfBanks[curBank].GetBalance().ToString("c");
    }
}

Bank.cs

public class Bank{

    public Bank() { }

    public Bank(string orgn, float amntToRprt, float blnce) {
        origin = orgn;
        amountToReport = amntToRprt;
        balance = blnce;
    }

    public string origin { get; set; }
    public float amountToReport { get; set; }
    public float balance { get; set; }

    public bool Deposit(float amnt) {
        if (amnt > 0) {
            balance += amnt;
            if(amnt > amountToReport) {
                FlagForReport();
            }
            return true;
        }
        else
            return false;
    }

    private void FlagForReport() {
        throw new NotImplementedException();
    }

    public float GetBalance() {
        return balance;
    }

    public bool Withdraw(float amnt) {
        if (amnt > 0) {
            if (balance >= amnt) {
                balance -= amnt;
                return true;
            }
            else
                return false;
        }
        else
            return false;
    }

    public bool Transfer(float amnt, Bank bank) {
        if (amnt > 0) {
            if (balance >= amnt) {
                if(bank.Deposit(amnt))
                    balance -= amnt;
                return true;
            }
            else
                return false;
        }
        else
            return false;
    }
}

1 个答案:

答案 0 :(得分:2)

这是本周第四次提出阵列问题时遇到同样的问题和相同的解决方案。

你在这里声明了数组:

listOfBanks = new Bank[banks.options.Count];

但是在调用

之前没有创建每个Bank脚本的新实例

listOfBanks[0].Deposit(50);listOfBanks[curBank].GetBalance().ToString("c").

声明数组并设置大小 NOT - 与创建脚本的新实例相同。

解决方案是遍历数组并创建每个数组的新实例。

Banks.cs中,将Start()函数中的代码替换为以下代码:

void Start()
{
    //Declare how much Bank array should be created
    listOfBanks = new Bank[banks.options.Count];

    //Now Create instance of each bank
    for (int i = 0; i < listOfBanks.Length; i++)
    {
        //Create new instance of each Bank class
        //listOfBanks[i] = new Bank();
        listOfBanks[i] = new Bank("", 50, 50);
    }

    listOfBanks[0].Deposit(50);
}