第一个从实例化为空的文本文件中读入的预制件名称

First read-in prefab name from a text file getting instantiated to null

我有一个名为 prefabstxt 文件,其中包含我的预制件的名称:

prefab1

此预制件存在且有效!

使用以下代码,我读入了文件的内容(我的预制件名称):

TextAsset foldersdata = (TextAsset)Resources.Load( "prefabs", typeof(TextAsset) );
prefabs = foldersdata.text.Split('\n');

我在编辑器中显示这些名称,然后无论选择哪个名称,我的 Unity 程序都会加载所选预制件:

GUILayout.BeginArea( new Rect( Screen.width/6, Screen.height/6, Screen.width*2/3, Screen.height*2/3 ), displayStyle3 );
GUILayout.Label("Choose Prefab");
selectedPrefab = GUILayout.SelectionGrid( selectedPrefab, prefabs, 1, displayStyle2 );
GUILayout.Label("");

if( GUILayout.Button("Load Prefab") )
{
  prefab = prefabs[ selectedPrefab ];
  sceneBase = Instantiate( Resources.Load<GameObject>( "Prefabs/" + prefab ) ) as GameObject;
  blah blah blah;
}

到目前为止,我只有 1 个预制件,而且效果很好。

我现在在 txt 文件的顶部添加了一个新的预制件:

prefab2
prefab1

正在读取 txt 文件并在编辑器中正确显示。

起初,我收到关于 prefab2 的著名错误消息:

argumentexception: the thing you want to instantiate is null.

但是因为 两个 预制件都存在并且一切看起来都很好,我认为这个错误消息可能不适用于这种情况!

因此,我颠倒了预制件名称在 txt 文件中出现的顺序:

prefab1
prefab2

现在,我收到 prefab1 的错误消息,这是名字。

我一直在测试这个,我意识到无论什么预制件恰好是 txt 文件中的第一个,编辑器都会抱怨它是空的。

我现在真的很迷茫。谁能看出这里的问题是什么?

正如@Dom 在评论中指出的那样,您的问题可能是由于 end line 字符与您预期的单个 '\n' 不同。

鉴于文本文件可能包含未知类型的 newline,您可能希望安全而不是抱歉,并且这样做:

var lineSeparators = new [] { "\n", "\r" };
prefabs = foldersdata.text.Split(lineSeparators, StringSplitOptions.RemoveEmptyEntries);