对另一个类中的变量的引用会产生NULL

时间:2017-03-18 14:57:54

标签: c# unity3d

我有两个类,genDicTable和StartGame。我想在StartGame中引用genDicTable中的变量,但它会产生NULL。

genDicTable.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class genDicTable : MonoBehaviour
{
    public TextAsset file;
    public double masterCount;

    private void Start()
    {
        Load(file);

        masterCount = rowList.Count;
        Debug.Log(masterCount); // <-- This properly prints out the value of masterCount    
    }

    public class Row
    {
        public string id;
        public string word;
        public string length;
    }

    public List<Row> rowList = new List<Row>();

    public void Load(TextAsset csv) {
        // This function assigns a value into RowList
    }
}

StartGame.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StartGame : MonoBehaviour {

    public genDicTable GEN;    

    private void Start()
    {
        Debug.Log(GEN.masterCount); // <-- This yields NULL.
    }
}

所以,问题是当我在StartGame.cs中访问变量masterCount时,会产生错误“NullReferenceException:Object reference not not set to object of object。”

我在这里缺少什么?

4 个答案:

答案 0 :(得分:3)

您需要对该对象的引用。

如果您的班级与StartGame的同一个对象相关联,那么您可以执行此操作:public genDicTable GEN = GetComponent<genDicTable>();

如果您的课程附加到其他对象,则public genDicTable GEN = GameObject.Find("YourOtherObjectName").GetComponent<genDicTable>();

修改

如果genDicTable脚本存在,您只想引用它:

public class StartGame : MonoBehaviour {

    public genDicTable GEN;    

    private void Start()
    {
        GEN = GameObject.Find("your object's name").GetComponent<genDicTable>();`
        Debug.Log(GEN.masterCount); // <-- This yields NULL.
    }
}

如果genDicTable脚本存在,您只想创建新的实例,请检查this answer。

答案 1 :(得分:-1)

public static double masterCount;

不能完全记住统一编辑器是如何工作的,但看起来你没有创建genDicTable的实例,因此双重需要是静态的才能访问。

答案 2 :(得分:-1)

您永远不会初始化该字段。将其更改为此

public genDicTable GEN = new genDicTable(); 

或在构造函数中执行:

public StartGame()
{
    GEN = new genDicTable();
}

答案 3 :(得分:-1)

您没有为GEN分配任何价值。这应该可以解决问题:

private void Start()
{
    GEN = new genDicTable(); 
    Debug.Log(GEN.masterCount); // <-- This is no longer NULL.
}