我正在尝试在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'
答案 0 :(得分:0)
问题是wordList
被标记为static
,但是它随后使用了words
,这不是静态的。
由于可以在不初始化类实例的情况下使用static
变量,因此编译器不能允许它依赖于非静态变量,因为当未使用该类时,非静态变量将不存在。实例化。这是因为可能会出现某人想要使用wordList
的情况,但是由于它是static
,因此不是在这种类型的任何特定实例化对象的上下文中。由于words
只能属于该类的特定副本,因此wordList
不在该类的上下文中时永远无法访问它。
您可能会在其他地方找到关于静态属性和方法的更清晰的解释,但这是我的基本知识。
无论如何,解决问题的最简单方法是将所有属性设为静态:
更改
TextAsset words = Resources.Load<TextAsset>("words");
到
static TextAsset words = Resources.Load<TextAsset>("words");