【问题标题】:Unity3D update local assetBundleUnity3D 更新本地assetBundle
【发布时间】:2017-07-06 09:37:45
【问题描述】:

在我的项目中,我有一堆存储为assetBundles 的项目。在我的服务器中,我存储了一个项目列表,包括它们的 ID 和版本。所以理想情况下,使用UnityWebRequest.GetAssetBundle(uri, versionId)我每次打开应用程序时只获取项目列表,如果第一次打开,它将下载每个项目;如果第二次打开,它只会下载我在服务器上更新了版本号的那个。一切都很简单。

但是现在,我想先将这些assetBundles 存储在本地,这样人们就不需要下载蜂窝数据。有没有一种简单的方法来管理这些assetBundles?

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    您可以将 AssetBundles 放在 StreamingAssets 文件夹中。文件夹应该是这样的:

    Assets/StreamingAssets/
    

    当您构建项目时,Unity 将在构建中包含 AssetBundle。当然,您可以使用Resources API,但StreamingAssets 文件夹似乎更适合这里。

    将 AssetBundle 放置在那里后,您可以使用 Application.streamingAssetsPathAssetBundle.LoadFromFile 加载 AssetBundle。

    您还可以使用 WWW API 和 Application.streamingAssetsPath 来加载 AssetBundle。

    【讨论】:

    • 所以我假设我需要一个本地文件来跟踪我的初始项目 ID 和版本,对吗?如果我在服务器上的项目有更新版本,我会删除我的旧资产包并从网络加载。但是如何实施该跟踪系统?如果它是一个文本文件,人们很容易修改它,这将是一个问题。
    • 通常,您将玩游戏所需的 minimum 对象包含在 AssetBundles 中,并像我上面描述的那样将其与游戏打包。它不能*被删除。这就是我称之为最低限度的原因。现在,关于包含新对象的更新或扩展包,请下载到Application.persistentDataPath/yourfolder/。它可以在任何平台上运行。您下载并保存到Application.persistentDataPath/yourfolder/ 的资产是您可以下载或更新的资产。你可以创建一个简单的数据结构来保存版本。
    • This 我发布的帖子有一个简单的保存/加载/删除来自Application.persistentDataPath 的数据的功能。至于能够修改文件的人,你不能阻止它。如果它在他们的设备上运行,你真的不能。只需添加基本的加密/解密功能来保存您的文件,但无论如何它们仍然可以被黑客入侵。
    • 感谢您的提示!
    • @TomerPeled 否。您的游戏可以附带许多 AssetBundle,但无法对其进行更新。任何看起来像是在更新的 Unity 功能只是复制或下载新功能。
    【解决方案2】:

    您“”保留本地文本文件。您在本地捆绑包中有版本号。您在服务器上有一个文本文件。然后获取文本文件,将其与捆绑包中的版本进行比较,并在必要时进行更新。

    在服务器中,您也可以拥有一个仅包含 textasset 的资产包来保护它。

    您可以构建资产包并将它们放在流资产文件夹或任何地方并使用AssetBundle.LoadFromFile()

    【讨论】:

    • 我以为版本号不在本地bundle中,只是UnityWebRequest.GetAssetBundle抓取服务器更新的随机数?
    • you have the version number inside the local bundle 的意思是您创建一个 TextAsset 指示资产包的版本和其他属性,并将其与捆绑包一起打包。 @ywj7931
    • 这样,其他人无法修改,因为它不是文本文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2018-12-19
    • 2022-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多