第一个从实例化为空的文本文件中读入的预制件名称
First read-in prefab name from a text file getting instantiated to null
我有一个名为 prefabs 的 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 文件中的第一个,编辑器都会抱怨它是空的。
我现在真的很迷茫。谁能看出这里的问题是什么?
正如@Dom 在评论中指出的那样,您的问题可能是由于 end line
字符与您预期的单个 '\n'
不同。
鉴于文本文件可能包含未知类型的 newline
,您可能希望安全而不是抱歉,并且这样做:
var lineSeparators = new [] { "\n", "\r" };
prefabs = foldersdata.text.Split(lineSeparators, StringSplitOptions.RemoveEmptyEntries);
我有一个名为 prefabs 的 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 文件中的第一个,编辑器都会抱怨它是空的。
我现在真的很迷茫。谁能看出这里的问题是什么?
正如@Dom 在评论中指出的那样,您的问题可能是由于 end line
字符与您预期的单个 '\n'
不同。
鉴于文本文件可能包含未知类型的 newline
,您可能希望安全而不是抱歉,并且这样做:
var lineSeparators = new [] { "\n", "\r" };
prefabs = foldersdata.text.Split(lineSeparators, StringSplitOptions.RemoveEmptyEntries);