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

时间:2015-04-16 16:02:44

标签: c# unity3d

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

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文件中的第一个,编辑器都会抱怨它是空的。

我现在很困惑。谁能看到问题出在这里?

1 个答案:

答案 0 :(得分:1)

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

鉴于文本文件可能包含未知类型的newline,您可能希望安全而不是抱歉,并按照以下方式执行此操作:

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