我有两个类,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。”
我在这里缺少什么?
答案 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.
}