我有一个名为预制件的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文件中的第一个,编辑器都会抱怨它是空的。
我现在很困惑。谁能看到问题出在这里?
答案 0 :(得分:1)
正如@Dom在评论中所指出的那样,您的问题可能是由于与您期望的单个end line
不同的'\n'
字符。
鉴于文本文件可能包含未知类型的newline
,您可能希望安全而不是抱歉,并按照以下方式执行此操作:
var lineSeparators = new [] { "\n", "\r" };
prefabs = foldersdata.text.Split(lineSeparators, StringSplitOptions.RemoveEmptyEntries);