问题标签 [assetbundle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1103 浏览

ios - Unity AssetBundle.LoadAsync 和代码剥离

我们需要减少标题的内存消耗,最初是针对 iOS,然后是针对 Android。

我们正在研究的领域之一是代码剥离,如文章Optimizing the Size of the Built iOS Player中所建议的那样。

测试各种剥离级别、程序集和字节码,我们在运行时遇到了崩溃。我已将其缩小到使用该AssetBundle.LoadAsync()方法,用AssetBundle.Load()调用代替它的用法。虽然这已经阻止了崩溃,但它严重破坏了游戏的某些部分,在这个后期我们没有时间修复。

因此,退后一步 - 代码剥离正在删除AssetBundle.LoadAsync()导致游戏在运行时崩溃的依赖项。在链接的文章中,它说使用link.xml文件来指定其他依赖项(我必须添加System.Security.Cryptography到此列表中)。

问:需要哪些依赖项AssetBundle.LoadAsync()

此外,是否有任何解决依赖关系的技巧?我在 .NET Reflector 中看了一眼,但是没有产生太多信息,因为它只是调用了一个外部 DLL。

0 投票
2 回答
23707 浏览

caching - Unity 3D:资产包与资源文件夹与 www.Texture

因此,我在论坛上阅读了一些关于 Unity 3D 中 AssetBundles 和 Resources 文件夹的信息,但我无法找到解决我所面临问题的最佳解决方案。这是问题所在:

我有一个专为独立设计的程序,可以加载充满 .png 和 .jpg 图像的“书籍”。目前,每次程序启动时,页面都是相同的。在任何“书”的场景开始时,它会使用 www.texture 和路径一次加载所有这些图像。然而,我现在意识到,这可能是一种在运行时访问事物的非性能方法——它很慢!这意味着在场景开始并且书的页面图像加载(在非传奇计算机上)时,用户在 5-20 秒内不能做任何事情。所以,我不知道这三件事中哪一个是最快的:

1) 每本书加载一个资产包(比如 20 个纹理,每个 1 mb)。

2) 每页加载一个资产包(每个 1 mb)。

3) 前两个选项之一,但从资源文件夹加载。

哪个会更快,为什么?我知道资产包是统一打包的,但这是否意味着里面的纹理将被预压缩并且在加载时更容易在内存中使用?资源文件夹是否会导致加载时间减少?是什么赋予了?据我了解,资源文件夹加载到缓存中 - 但它与独立播放器通常使用的缓存相同吗?或者这是额外的、未使用的空间?我想另一个问题是我不确定从内存中加载内容和将它们存储在缓存中之间有什么区别。

干杯,伙计们...

0 投票
2 回答
17025 浏览

android - 我可以在 Unity 中编辑或提取资产包的内容吗?

我有一个 Unity 资产包。我在这些和一些 db 文件中有更多的包。有没有一种简单的方法来编辑或提取资产包的内容。

0 投票
1 回答
5496 浏览

unity3d - 哪种方式更好处理 AssetBundle 下载管理

在提出问题之前,我将解释我需要什么样的要求。在我的游戏中,玩它需要很多纹理。由于这一点以及 ipa 大小(iOS)的限制,我认为使用assetbundle 是必须的。因为现有的代码实现,我创建了资产包,1 个资产包用于 1 个图像。例如:我有 100 个图像,然后我将创建 100 个资产包(其中 mainasset 将是纹理),具有相同的名称。

我希望我的游戏可以离线在用户第一次下载所有需要的资产包所以如果用户第一次玩或者下载我的游戏的更新版本,游戏会被强制进入特殊场景,下载所有需要的assetbundle,之后用户可以在没有互联网连接的情况下玩游戏。

我认为有两种方法可以下载这些资产包:

  1. 正常方式:我将所有 100 个资产包放在我的服务器中,并放入 1 个 xml 文件,其中包含所有资产包信息及其版本。在特殊场景下,游戏会下载xml文件,并从中下载100个assetbundles WWW.LoadFromCacheOrDownload。目的只是将所需的资产包存储到游戏缓存中。全部下载成功后就可以离线玩了,如果游戏需要加载assetbundle,那我就再调用一次WWW.LoadFromCacheOrDownload,因为还在缓存中,所以可以离线玩。当然,我假设缓存仍然存在,只要我不明确清除缓存。

  2. 困难的方法:我会将所有 100 个资产包压缩到 1 个 zip 文件。游戏将下载 xml 文件和 zip 文件。我将解压缩 zip,并将所有 100 个资产包放在移动存储(iOS 和 Android)中。所以在那之后,如果游戏需要加载资产,我只需调用WWW.LoadFromCacheOrDownloadurl 是使用file:///指向移动存储路径的方案。

概括:

正常方式:

减号:我假设缓存还在,但如果缓存有问题,用户将无法玩游戏。

加:简单的实现,因为假设缓存会很好。

艰难的道路:

减号:嗯,我不知道这是否是减号,但是这一点,我必须实现未归档的 zip 文件并将它们存储在存储中。服务器端和应用程序端需要更多的实现。而且由于我是新手,我不知道这方面的最佳实践。

加:更健壮

那么哪个更好呢?或者有什么更好的推荐?

0 投票
0 回答
647 浏览

unity3d - 如何从层次结构中的Gameobject而不是选择中构建AssetBundle?

我正在尝试自动化从层次结构中手动选择游戏对象的过程,然后通过鼠标拖动到项目面板中,然后从菜单中选择跟踪依赖项并将预制件导出到 .Unity3D 文件中

我想通过代码自动化这个。

我想到了这样的过程......创建预制然后 buildpipeline.BuildAssetBundle ,,, 但是 buildpipeline.BuildAssetBundle 中的前 2 个参数是问题我不能让它们适合游戏对象,也不能预制前 1 个参数(对象)作为主要资产,第二个采用 (object[]) 引用内部资产文件.....但我不能把它指代游戏对象或预制件。

0 投票
1 回答
9429 浏览

load - Unity3D 如何使用 AssetBundle.LoadAsync 从 Assets 文件夹中直接加载预制件

我可以使用 AssetBundle.LoadAsync 直接从 Assets 文件夹加载预制件吗?在 Assets/Bundle 文件夹中有一个名为 "BGELement" 的预制件,我不想将其放入 Resources 文件夹并使用 Resource.Load 加载它。以下是我的代码,但它会出错:NullReferenceException,错误行是 ab.LoadAsync()

0 投票
0 回答
945 浏览

android - Android 应用程序崩溃,使用 Unity 和 Vuforia

首先感谢您花时间阅读我的问题。我正在使用 Unity Pro 4.2.0f 和 Nexus 10。

问题如下:加载和卸载 +/- 20 个资产包后,我的应用程序崩溃。当然,我的第一个想法是它可能是内存问题,也许有些东西没有正确卸载,但我用分析器检查了所有内容,我尝试对 Logcat 进行编码,但我无法解决问题。

这是 APP 崩溃的两条 Logcat 行:

E/Surface ( 123): queueBuffer: error queuing buffer to SurfaceTexture, -32 I/ActivityManager( 450): Process com.xxxxxx.xxxxxx (pid 21277) has died.

它永远不会在 PC 上的 PlayMode 中发生...

有没有人知道可能是什么问题,或者我如何继续找到解决方案。

谢谢你。

问候帕特里克

0 投票
1 回答
3372 浏览

c# - 从 Unity 资源包中销毁加载的资源

我在我的项目中加载了一个资产包,并将它们全部添加到一个列表中,以便我可以遍历资产包中的每个单独对象。但是,当我在场景中不再需要加载的对象时,我无法删除它。

在我的研究中,我知道 Bundle.UnloadAll 但从我读过的内容来看,它会破坏我不想要的整个捆绑包。现在我的代码如下所示:

此代码遍历包含加载的资产包对象的列表,并应生成列表中的下一个。同时,它应该破坏之前加载的。但是当我运行这段代码时,我收到以下错误:

不允许破坏资产以避免数据丢失。如果您真的想删除资产,请使用 DestroyImmediate (theObject, true);

所以我将我的代码更改为它的建议,我遇到了这个错误:

MissingReferenceException:“GameObject”类型的对象已被销毁,但您仍在尝试访问它。您的脚本应该检查它是否为空,或者您不应该销毁该对象。

但是,我的列表中没有任何内容被删除,并且第一个生成的对象仍然存在。

有没有人遇到过类似的问题?我想要做的甚至可能吗?

任何帮助,将不胜感激。

0 投票
1 回答
8202 浏览

android - 如何更新在 Android 上运行 Unity 制作的游戏?

我的游戏有 100M 资源包,我将 budle 文件放入 StreamingAssets 文件夹(我想将我的 apk 作为一个完整的应用程序发布,而不是在播放时下载),然后我将我的项目构建为一个 apk 文件,然后我安装了apk 文件到我的设备。

但是,当我的游戏发现有新的更新可用时,我该如何更新我的捆绑包?Android 上的 StreamingAssets 文件夹是只读的。

一种解决方案是:将 StreamingAssets 文件夹中的包复制到 Android 的外部存储等某个位置,然后在外部存储中使用包。但这会将我的游戏大小从 100M 包增加到 200M。

那么在Android上,当我安装一个apk时,我可以同时将一些文件安装到可写的地方吗?

任何人都可以帮助我吗?谢谢。

0 投票
1 回答
840 浏览

ios - 如何在 unity3d 中使用资产包作为数据库而不是 PlayerPrefs

我是unity3d的新手。我通常使用 PlayerPrefs 在我的游戏中存储分数、硬币等数据。我正在开发一个游戏,我需要在其中制作可以由服务器端更改的动态数据库。

我可以使用资产包吗?任何人都可以通过资产包为我提供数据库的逐步实现。如何将整数、列表和数组存储到资产包中?

除了资产包之外是否还有其他选项来制作数据库。

即使是一点帮助也将不胜感激。提前致谢。:-)