C# “我怎么能?”;平";自定义Unity3D检查器中的文本文件?

C# “我怎么能?”;平";自定义Unity3D检查器中的文本文件?,c#,unity3d,C#,Unity3d,我试图在Unity3D中的自定义编辑器中“ping”文本文件,例如使用(在层次结构中显示文件,并在其上闪烁黄色选择字段)。 该文件位于Assets/StreamingAssets/Example.csv 最简单的解决方案(我认为)是简单地在ObjectField中显示它->如果单击该字段,资产也会被“ping”。 所以我试着: // For debug, later the filename will be dynamic var path = "Assets/StreamingAssets

我试图在Unity3D中的自定义编辑器中“ping”文本文件,例如使用(在层次结构中显示文件,并在其上闪烁黄色选择字段)。
该文件位于
Assets/StreamingAssets/Example.csv

最简单的解决方案(我认为)是简单地在ObjectField中显示它->如果单击该字段,资产也会被“ping”。 所以我试着:

// For debug, later the filename will be dynamic
var path = "Assets/StreamingAssets/" + "Example" + ".csv";
TextAsset file = (TextAsset)AssetDatabase.LoadAssetAtPath(path, typeof(TextAsset));
EditorGUILayout.PrefixLabel("CSV File", EditorStyles.boldLabel);
EditorGUILayout.ObjectField(file, typeof(TextAsset), false);
但是,尽管文件存在并且路径正确,
file
始终是
null


不幸的是,您的代码很好,这是一个bug

当资产被放置在
资产
文件夹中的
StreamingAssets
文件夹中时,就会发生此错误。这会导致
AssetDatabase.LoadAssetPath
功能失败。我对此进行了搜索,只有一个没有找到任何解决办法。我的意思是,您可以使用
System.IO
命名空间中的一个API来读取该文件,但是您将无法访问引用该文件的
对象

可能的解决方案:

1。重新启动Unity

2。在资产文件夹中创建一个名为“Test”的文件夹

3。将
StreamingAssets
文件夹拖动到此“测试”文件夹

4。将代码中的路径更改为
var path=“Assets/Test/StreamingAssets/“+”示例“+”.csv”然后单击“播放”。它不应该为空。如果不再为空,请将
StreamingAssets
文件夹移回Assets文件夹,并将代码中的路径更改为旧路径

上面的步骤是我如何将它固定在我的一侧,现在它可以工作了。如果这不起作用,我建议您将
“Example.csv”
文件移动到Assets文件夹,然后使用
var path=“Assets/”+“Example”+“.csv”来阅读它。如果可行,请将其移回
StreamingAssets
文件夹,并将路径更改为旧路径

我建议您做的另一件事是调用
AssetDatabase.Refresh()
刷新项目。
我还建议您为此问题提交错误报告。

我的错误是将类型转换为
TextAsset
,并使用它需要
Type
参数

将其作为
对象
(资产)保留为“uncasted”,并使用不需要
类型
参数的选项:

//对于调试,稍后文件名将是动态的
var path=“资产/StreamingAssets/”+“示例”+“.csv”;
var file=AssetDatabase.LoadMainAssetPath(路径);
PrefixLabel(“CSV文件”,EditorStyles.boldLabel);
ObjectField(文件,typeof(object),false);

你能解释一下你到底想做什么吗?说你想“ping”一个文件就像说我需要格式化厨房地板一样。@Archer看到我更新的问题了吗?你能显示文件放置位置的屏幕截图吗?@Programmer说它在
Assets/StreamingAssets/Example.csv
下,但我更新了我的问题我知道你说它在哪里。我需要一个截图来检查打字错误,因为这里有很多问题。您如何知道
文件
为空?您可以执行
Debug.Log(文件)
来验证这一点吗?不幸的是,这行不通。它必须保留在文件夹
Assets/StreamingAssets
中,以便能够在以后更改文件,并且在生成的运行时仍将其读入。它是Unity的特殊文件夹之一,可通过访问。你实际购买的东西是将其移动到另一个文件夹,直接将其转换为Unity TextAsset,在构建中无法再进行编辑。我对你的评论感到困惑。我以为这是一个编辑器插件?顺便说一句,我认为你读错了答案。最后一步说,您应该将其移回
资产/StreamingAssets
,并且您的代码不应该工作……问题是,当路径位于
资产
中的其他位置时,它可以工作,但一旦它位于
资产/StreamingAssets
中,它就不会工作。
StreamingAssets
文件夹是一个特殊的文件夹,允许动态加载数据,即使在完成的构建中也是如此。因此,用户可以在之后更改设置或标签。这就是为什么它必须保留在
资产/流化资产中的原因,因为我的答案太晚了,但我最终发现这只是一个愚蠢的打字问题。看见无论如何,谢谢你的支持!