Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 引用另一个类中的变量会产生NULL_C#_Unity3d - Fatal编程技术网

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

C# 引用另一个类中的变量会产生NULL,c#,unity3d,C#,Unity3d,我有两门课,genDicTable和StartGame。我想引用StartName中genDicTable中的一个变量,但它会生成NULL genDicTable.cs using UnityEngine; using System.Collections; using System.Collections.Generic; public class genDicTable : MonoBehaviour { public TextAsset file; public doub

我有两门课,genDicTable和StartGame。我想引用StartName中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
    }
}
使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
公共类可性别区分:单一行为
{
公共文本资产文件;
公共双主计数;
私有void Start()
{
加载(文件);
masterCount=行列表。计数;

Debug.Log(masterCount);//您需要对该对象的引用

如果类附加到与
startName
相同的对象,则可以执行以下操作:
public genDicTable GEN=GetComponent();

如果您的类附加到其他对象,则
public genDicTable GEN=GameObject.Find(“您的其他对象名”).GetComponent();

编辑

如果存在
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.
    }
}
公共类开始名称:单一行为{
公共性别可鉴定基因;
私有void Start()
{
GEN=GameObject.Find(“对象名称”).GetComponent()`
Debug.Log(GEN.masterCount);//

我不太记得unity编辑器是如何工作的,但看起来好像您还没有创建genDicTable的实例,因此double需要是静态的才能访问。

您从未初始化该字段。将其更改为此

public genDicTable GEN = new genDicTable(); 
或者在构造函数中执行此操作:

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

您尚未为GEN分配任何值。这将解决此问题:

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

Debug.Log(GEN.masterCount);//正如它所说的,值为null。这种行为没有任何错误。您还没有在startgame.csp中为genDictTable类型的变量GEN创建任何实例。请仔细阅读指向的副本。如果您不知道什么是实例以及如何初始化它,那么这里给出的任何答案都不能帮助您理解您的pro问题和避免将来的失误出于同样的原因,我已经尝试添加“static”,但没有运气…genDicTable的start方法是否运行过?是的,我检查了genDicTable中的所有内容,并得出了它应该得到的结果。问题是如何引用另一个类…将其作为static,然后是genDicTable.masterCount而不是GEN.masterCountNo.如果存在多个
genDicTable
实例,则会出现问题。
GetComponent
是OP正在查找的。谢谢,但是new genDicTable()会产生另一个警告,说明“您正试图使用'new'关键字创建单行为。这是不允许的……”最好是为这个问题打开另一张罚单。不幸的是,我从未使用过
monobhavior
,也无法帮助您解决这个问题。您创建了一个脚本的新实例,该脚本使用
new
关键字继承自
monobhavior
。谢谢,但是new genDicTable()会产生另一个警告“您正试图使用'new'关键字创建一个MonoBehavior。这是不允许的……”正如您所说,它不再是null,而是变成0,这不是正确的值。@Dongsan停止这些,看看答案。好吧,还没看到您使用unity(因此MonoBehavior)。这在使用Visual Studio开发WinForms应用程序时会起作用,但不在此处…谢谢,但您的建议会导致“UnityException:不允许从MonoBehavior构造函数(或实例字段初始值设定项)调用Find”,请改为在唤醒或启动时调用它"错误。我也在Start中调用了它,我的变量的值变成了0,这不是正确的值。@Dongsan修改了他的答案。再次检查。你必须在函数内部执行
GetComponent
。谢谢你FCin和所有其他顾问。最后我找出了问题所在,问题在于两个脚本的执行顺序未经验证。结果证明,在引用之前执行了引用。这就是为什么我没有得到(或得到错误)我想要的值。我将genDicTable()中的Start()更改为Awake(),问题就解决了。请原谅我的愚蠢。
public StartGame()
{
    GEN = new genDicTable();
}
private void Start()
{
    GEN = new genDicTable(); 
    Debug.Log(GEN.masterCount); // <-- This is no longer NULL.
}