我正在尝试在 Unity 3D 的自定义编辑器中“ping”文本文件,例如使用EditorGUIUtility.PingObject https://docs.unity3d.com/ScriptReference/EditorGUIUtility.PingObject.html(在层次结构中显示文件并在其上闪烁黄色选择字段)。
该文件位于Assets/StreamingAssets/Example.csv
最简单的解决方案(我认为)是简单地将其显示在 ObjectField 中 -> 如果单击该字段,资产也会被“pinged”。
所以我正在尝试:
// 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);
但是尽管文件在那里并且path
正确的,file
总是null
不幸的是,您的代码很好,但这是一个错误。
当资产放置在StreamingAssets
文件夹中的Assets
文件夹。这导致AssetDatabase.LoadAssetAtPath
功能失败。我确实搜索过这个,只有一个post https://github.com/inkle/ink-unity-integration/issues/23没有任何解决方法就出现了。我的意思是你可以使用以下 API 之一System.IO
命名空间来读取文件,但随后您将无权访问Object
引用该文件。
可能的修复:
1.重新启动Unity。
2.在Assets文件夹中创建一个名为“Test”的文件夹。
3.拖动StreamingAssets
文件夹到此“测试”文件夹。
4.将代码中的路径更改为var path = "Assets/Test/StreamingAssets/" + "Example" + ".csv";
然后点击“播放”。它不应该为空。如果它不再为空,则移动StreamingAssets
文件夹回到Assets文件夹,并将代码中的路径更改为旧路径。
上面的步骤是我将其固定在我这边的方法,现在可以使用了。如果这不起作用,我建议你移动"Example.csv"
文件到 Assets 文件夹然后使用var path = "Assets/" + "Example" + ".csv";
阅读它。如果有效,请将其移回StreamingAssets
文件夹并将路径更改为旧路径。
我建议你做的另一件事是打电话AssetDatabase.Refresh()
刷新项目。
我还建议您针对此问题提交错误报告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)