【问题标题】:Accessing StreamingAssets resources from C++ DLL in Unity on Android在 Android 上的 Unity 中从 C++ DLL 访问 StreamingAssets 资源
【发布时间】:2019-05-22 20:23:42
【问题描述】:

我在 Unity for Android 中开发了一个 C# 应用程序。此外,我构建了一个自定义的外部 C++ DLL,该 DLL 已正确加载并可从 C# 代码访问。我还在 StreamingAssets 文件夹中添加了一些 .xml 文件,这些文件按预期工作,因为我可以看到这些文件加载​​到 .apk 中。

目前我的问题是我无法从我的 C++ 库中访问此类 xml 文件。一方面我不确定如何正确地做到这一点,另一方面我尝试了多种不成功的方法,包括试图了解我的 DLL 在哪个 cwd 中加载,然后导航到我需要的文件(因为我一直没有工作收到拒绝访问错误)。

编辑:

您的回复实际上使我走上了正轨,我解决了以下问题:

  • 在应用程序的 OnStart() 阶段,我使用 UnityWebRequest 类从 JAR 文件中提取所需文件,然后将它们保存在 Application.persistentDataPath 中
  • 之后,我将每个文件的新路径传递给我的 DLL,这样我就可以毫无问题地访问它们。

【问题讨论】:

  • 在构建的应用程序中,我会将它们复制到 Application.persistentDataPath 中,目标普通文件夹系统通常可以访问该地址。正如它所说,Android上的路径是/storage/emulated/0/Android/data/<packagename>/files,也可以使用android.content.Context.getExternalFilesDir访问

标签: c# android c++ unity3d


【解决方案1】:

在 Android 上,StreamingAssets 在一个罐子里。这可能是您无法访问它们的原因,但正如您在手册中看到的那样,您可以使用 WWW 类在那里检索文件。

在 Android 上,这些文件包含在压缩的 .jar 文件中 (本质上与标准 zip 压缩格式相同 文件)。这意味着如果你不使用 Unity 的 WWW 类 检索文件,需要使用附加软件才能看到里面 .jar 存档并获取文件。

(https://docs.unity3d.com/Manual/StreamingAssets.html)

【讨论】:

  • 谢谢,我知道那一点文档。问题是 UnityWWW 类只能从代码的 C# 端调用。我需要直接从我的 C++ DLL 加载 xml 文件。
【解决方案2】:

在 Android 上,这些文件包含在压缩的 .jar 文件中 (本质上与标准 zip 压缩格式相同 文件)。这意味着如果你不使用 Unity 的 WWW 类 检索文件,需要使用附加软件才能看到里面 .jar 存档并获取文件。


JAR 是一种包文件格式,通常用于将许多 Java 类文件以及相关的元数据和资源聚合到一个文件中以进行分发。 JAR 文件是包含 Java 特定清单文件的存档文件。 它们以 ZIP 格式构建,通常具有 .jar 文件扩展名。


这意味着您可以像处理 zip 文件一样处理 jar 文件。 minizip 有一个 fork,其中包含有关如何使用它的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多