Unity的C#脚本错误,如何将这个CSV文件读入数组?

时间:2019-02-18 22:22:38

标签: c# csv parsing unity3d

我正在尝试在Unity上进行这个打字游戏。要求之一是将随机单词的CSV文件中的单词读入数组。当我手动创建单词数组时,程序中的所有内容都在工作,但是我无法终生弄清楚应该如何将CSV文件读入数组。我在网上找到的所有解决方案除了创建编译器错误外,什么都不会做。这是我必须生成单词的脚本的代码。

我尝试使用“ StreamReader”,甚至无法弄清楚它的工作原理,以及在此站点上找到的所有其他解决方案。每个人都不一样,无济于事。

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

public class GenerateWords : MonoBehaviour {

    TextAsset words = Resources.Load<TextAsset>("words");
    private static string[] wordList = words.text.Split(new char[] { '\n' });

    public static string GetRandomWord ()
    {
        int randomIndex = Random.Range(0, wordList.Length);
        string randomWord = wordList[randomIndex];

        return randomWord;
    }
}

遇到此错误:

  

资产/脚本/GenerateWords.cs(28,40):错误CS0236:字段   初始化程序无法引用非静态字段,方法或属性   `GenerateWords.words'

1 个答案:

答案 0 :(得分:0)

问题是wordList被标记为static,但是它随后使用了words,这不是静态的。

由于可以在不初始化类实例的情况下使用static变量,因此编译器不能允许它依赖于非静态变量,因为当未使用该类时,非静态变量将不存在。实例化。这是因为可能会出现某人想要使用wordList的情况,但是由于它是static,因此不是在这种类型的任何特定实例化对象的上下文中。由于words只能属于该类的特定副本,因此wordList不在该类的上下文中时永远无法访问它。

您可能会在其他地方找到关于静态属性和方法的更清晰的解释,但这是我的基本知识。

无论如何,解决问题的最简单方法是将所有属性设为静态:

更改

TextAsset words = Resources.Load<TextAsset>("words");

static TextAsset words = Resources.Load<TextAsset>("words");