【问题标题】:What is the difference between Application.streamingAssetsPath and Application.persistentDataPath?How are they used?Application.streamingAssetsPath 和 Application.persistentDataPath 有什么区别?它们是如何使用的?
【发布时间】:2018-12-31 08:21:39
【问题描述】:

我对这两者之间的某些概念有疑问。对于Application.streamingAssetsPath,我应该在我的项目中创建一个 StreamingAssets 文件夹,这样我就可以将文件保存到其中并稍后重新加载它。那么Application.persistentDataPathApplication.streamingAssetsPath的作用是什么?

如果我要保存资产和数据(位置、健康状况等),然后在移动设备(Android 和 IOS)和 PC 中重新加载它们。哪个是最好的选择?

下面我使用Application.streamingAssetsPath保存

using (FileStream fs = new FileStream(Application.streamingAssetsPath + "/Position.json", FileMode.Create))
    {
        BinaryWriter filewriter = new BinaryWriter(fs);
        filewriter.Write(JsonString);
        fs.Close();


    }

【问题讨论】:

  • StreamingAssets 内置在 apk/ipa 中,不能修改文件。您还必须在 Android 上格外小心,以免它们被压缩,因为以这种方式加载它们非常慢。 PersistentDataPath 是您保存在设备上的任何文件的存储位置。您可以在此处添加/删除/更改文件,在 iOS 上,如果您不将它们标记为不备份,这些文件将保存到 iCloud 备份中。
  • @RetiredNinja 对于 IOS 和 Android,路径是不同的。我必须在我的代码中编写两条路径。例如 -if #UNITY_IOS Application.persistentDatapath 和 if #UNITY_ANDROID Application.persistentDatapath。
  • 不确定你在说什么。是的,persistentDataPath 的内容在不同的平台上是不同的,但 Unity 会处理,你不需要做任何事情。
  • @RetiredNinja 我的意思是,如果我想让我的游戏同时在 android 和 IOS 上运行......并在两个版本中保存游戏。我应该怎么做
  • 简而言之:如果您需要从应用程序外部访问文件(例如,通过 Texteditor 等更改 XML 文件中的设置),请使用 persistentDataPath。您可以阅读docs 在哪里可以找到设备上针对不同平台的persistentDataPath。如果您不需要该外部访问权限,则可以选择 streamingAssets。 Unity 处理所有平台上的路径,因此 Android 和 iO 的代码保持相同..这就是使用 Unity 的全部想法;)

标签: c# unity3d


【解决方案1】:

一般来说,Application.persistentDataPath 用于构建期间不可用且将在分发后进行修改的数据(并且永远不应通过游戏更新进行修改),而使用Application.streamingAssetsPath 用于构建之前存在的游戏数据您希望能够在游戏期间使用 IO 系统进行读取(并且可能会在游戏更新中进行修改)。例如,玩家保存数据可能应该放在Application.persistentDataPath,对话文件可能应该放在Application.streamingAssetsPath

最大的技术区别是Application.persistentDataPath通常可以保存在与游戏数据不同的位置,这样卸载或更新游戏不会导致玩家丢失数据。大部分区别在于意图,Application.persistentDataPath 用于在游戏运行之间保存数据,Application.streamingAssetsPath 旨在允许开发人员拥有可以通过路径名访问的游戏文件。


如果您要存储您正在跟踪的角色的当前位置、当前健康状况和当前状态,您将需要Application.persistentDataPath。如果您要存储用于初始化的角色的起始位置、最大生命值和其他统计数据,Application.streamingAssetsPath 将是更好的选择。

【讨论】:

  • If you are storing the data for the starting position, maximum health, and other stats of a character that you will use for initialization, Application.streamingAssetsPath would be a better pick. 您宁愿直接在类中执行此操作.. 无需将它们存储在文本文件中...如果您不希望能够将其保存在那里稍后更改它们..那么您宁愿再次将其放在persitentDataPath
  • 这可能是真的,但这个问题似乎暗示他们无论出于何种原因都希望它位于单独的文件中。我试图接受隐含的上下文,而不是假设我自己的。例如,他们可能有一个生成字符数据的外部程序,在这种情况下,他们希望它生成文件,而不是代码。
  • 使用 Application.streamingAssetsPath 优于 Application.dataPath 有什么好处?
猜你喜欢
  • 2012-08-29
  • 2020-03-21
  • 1970-01-01
  • 2021-08-10
  • 2023-03-17
  • 2014-03-20
  • 2019-01-12
  • 2010-12-12
  • 2013-04-18
相关资源
最近更新 更多