【问题标题】:TextAsset returning null文本资产返回 null
【发布时间】:2016-12-10 20:41:03
【问题描述】:

我有一个脚本,我想将文本资源转换为字符串数组,然后用它来修改 PlayerPrefs。但是,在我粘贴在下面的代码的第二行中,我在运行时不断收到 NullReferenceException 错误。我认为这是因为我以错误的方式将文本资产转换为字符串。有人可以告诉我我做错了什么吗?谢谢

            TextAsset txt = (TextAsset)Resources.Load("SaveKeys1", typeof(TextAsset));

        string txtString = txt.text;



        char sep = (',');
        string[] keys = txtString.Split(sep);

        foreach(string key in keys)
        {
            PlayerPrefs.DeleteKey(key);
            Debug.Log(key);
        }

【问题讨论】:

  • 您是否确定txt 不等于null?
  • 您所展示的内容尚不清楚。对于空引用错误,您通常只需要更深入地调试。将第一行拆分为更多单独的行,并调试以准确找到返回null 的部分。从假设和猜测来看,最有可能的是 txt 在此处为空。只有通过调试才能知道原因。

标签: c# arrays string unity3d


【解决方案1】:

我认为这是因为我将文本资源转换为字符串 错误的方法。有人可以告诉我我做错了什么吗?

代码:

TextAsset txt = (TextAsset)Resources.Load("SaveKeys1", typeof(TextAsset));
string txtString = txt.text;

是这样做的正确方法。那里没有任何问题,因为您提到第二行 string txtString = txt.text; 导致异常,有两个可能的原因。

1.您的文件名拼写不正确。请直接从文件所在的位置复制文件名,然后将名称直接粘贴到Resources.Load 函数中。确保在函数中包含扩展名(.txt,.xml...)。

2.SaveKeys1 文件没有正确的扩展名。 TextAsset 仅支持.txt.html.htm.xml.bytes.json.csv.yaml.fnt等文件扩展名

3.SaveKeys1 文件没有放在正确的文件夹中。要使Resources.Load 函数起作用,该文件必须放在名为Resources 的文件夹中。通常,将此文件放在名为Resources 的任何文件夹中应该可以工作,但仅出于测试目的,在Assets/Resources 目录中创建文件夹,然后将您的SaveKeys1 文件放在那里。这应该可以。

【讨论】:

  • 我只有一个名为资源的文件夹中的 txt 文件。现在可以了。谢谢。
  • 好的,哪一个修好了?
  • 我明白了。使用Unity's special folders 时,此处的拼写很重要。编码愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多