Unity - 构建 .apk 时如何保存 .csv 文件

Posted

技术标签:

【中文标题】Unity - 构建 .apk 时如何保存 .csv 文件【英文标题】:Unity - How do I save .csv files when building an .apk 【发布时间】:2021-10-09 01:43:35 【问题描述】:

我目前将列表存储在 .csv 文件中,但是,当我构建 .apk 时,就像这些文件根本不存在一样。我如何设法将这些文件保存在构建中以便一切正常?

这是我目前针对这种情况的代码的 sn-p

private static string TODCSVPath = "/Scripts/TOD/TOD_Questions.csv";

public void GenerateTODS() //called in Awake()
    
        string[] allLines = File.ReadAllLines(Application.dataPath + TODCSVPath);
        foreach (string uncas in allLines)
        
            questions.Add(uncas);
        
    

在编辑器中一切正常,但我真的很难理解我需要修复什么。我搜索了一下,有人说使用string[] allLines = File.ReadAllLines(Application.persistentDataPath + TODCSVPath); 而不是string[] allLines = File.ReadAllLines(Application.dataPath + TODCSVPath); 但这会立即在控制台中引发错误。 还看到了一些关于创建TextAsset 然后从中读取文件的内容,但我根本无法做到。

注意:不知道这是否有帮助,但我所有的 .csv 文件都只有一列!

任何帮助或指导将不胜感激。谢谢!

【问题讨论】:

建议使用 Application.persistentDataPath 是一个不错的选择。确保路径确实存在(如果需要,创建文件夹)。 persistentDataPath 不会在您的项目文件夹中,通过打印调试检查它的位置 只有资源文件夹中的文件是构建的一部分。 docs.unity3d.com/ScriptReference/Resources.Load.html 【参考方案1】:

您有多种选择:

1- 资源

Unity 在播放器构建中包含Resources folders 下的资产。只需将您的 .csv 文件放在 Assets/Resources/ 文件夹下。然后你可以像这样访问它:

TextAsset myTextAsset = Resources.Load<TextAsset>("myfile"); // omit file extension
string csvText = myTextAsset.text;
...

2- 作为文本资源的引用

您还可以将 .csv 文件作为文本文件链接到场景中的 MonoBehaviour 或进入构建的资源中。这就是材料和其他资产进入玩家构建的方式。

例如,如果您在构建场景中的 GameObject 上有此组件,则可以访问 TextAsset。从技术上讲,“文件”不包含在播放器构建中,因为 Unity 会打包资产。但您可以访问 CSV 内容。

public class MyMono : MonoBehaviour 
  [SerializeField] TextAsset _textAsset;

  void Start() 
    string csvText = _textAsset.text;
    ...
  

【讨论】:

以我的拙见,似乎Resource.Load &lt; TextAsset &gt; ( 'fileNameOnly' ) 是要走的路,而不是'fileNameWithExtension' 作为Load 函数调用的参数。其余信息很好:-)

以上是关于Unity - 构建 .apk 时如何保存 .csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

Unity脚本生成ipa或apk的方法

构建失败:无法在 Unity 上构建 Android .apk

当我正在尝试为我正在通过Unity开发的游戏构建apk文件时,Android SDK未正确安装错误?

unity脚本中变量在另一个脚本如何调用

通过Jenkins自动化构建Unity-Android-AAB包

unity配置Android SDK,并构建导出apk格式