我正在统一webgl中使用以下功能加载和缓存资产捆绑包:
IEnumerator DownloadAndCacheAB(string assetName)
{
// Wait for the Caching system to be ready
while (!Caching.ready)
yield return null;
// Load the AssetBundle file from Cache if it exists with the same version or download and store it in the cache
using (WWW www = WWW.LoadFromCacheOrDownload(finalUrl, 1))
{
yield return www;
if (www.error != null)
{
Debug.Log("WWW download had an error:" + www.error);
}
AssetBundle bundle = www.assetBundle;
if (assetName == "")
{
GameObject abObject = …Run Code Online (Sandbox Code Playgroud) garbage-collection unity-game-engine assetbundle unity-webgl
我在Yii2框架上做一个Web应用程序.定义(扩展)新的AssetBundle
class NeonAsset extends AssetBundle {
public $sourcePath = '@app/themes/neon/';
public $css = [
'css/font-icons/entypo/css/entypo.css',
'...',
'...'
];
public $js = [
'js/be_in_head_tag.js',
'...',
'...',
];
}
Run Code Online (Sandbox Code Playgroud)
渲染时,CSS文件正在<head>标记中发布,JS文件在<body>标记的底部发布.没关系.
但是我希望be_in_head_tag.js在<head>标签中发布一个文件.当我使用$jsOptions它时,将所有JS文件移动到<head>标记中.
是否可以只为一个文件制作选项?
我不能让Unity Assetbundles在iOS版本中工作.
在Unity中,我构建了assetsbundles:
using UnityEditor;
public class CreateAssetBundles
{
[MenuItem("Assets/Build AssetBundles")]
static void BuildAllAssetBundles()
{
BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.iOS);
}
}
Run Code Online (Sandbox Code Playgroud)
它们在Unity中运行良好.使用它们
AssetBundle bundleLoadRequest = AssetBundle.LoadFromFile("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToString());
Run Code Online (Sandbox Code Playgroud)
和/或
WWW wwww = WWW.LoadFromCacheOrDownload("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToString(), 4);
Run Code Online (Sandbox Code Playgroud)
(如果没有"file://"前缀,捆绑包将无法在Unity或Xcode中工作)
我将项目构建到Xcode并在Xcode中运行它并收到此错误:
无法打开存档文件:/ Users/user/Documents/Workspaces/unityproject/Assets/AssetBundles/iOS/lchairanimations
它可能与某种方式设置正确的路径有关,但由于我之后将assetbundle文件夹复制到Xcode项目,问题仍然存在.
所以,我已经在论坛上关于AssetBundles和Unity 3D中的Resources文件夹做了一些阅读,我无法找到解决我面临的问题的最佳解决方案.这是问题所在:
我有一个专为独立设计的程序,可以加载充满.png和.jpg图像的"书籍".每次程序启动时,页面都是相同的.在任何"书"的场景开始时,它使用www.texture和路径一次加载所有这些图像.但是,我现在意识到,这可能是一种在运行时访问内容的非高效方法 - 它很慢!这意味着当场景开始并且书籍的页面图像加载(在非传奇计算机上)时,用户不能做任何事情5-20秒.所以,我无法弄清楚这三件事中哪一件最快:
1)每本书加载一个资产包(比如20个纹理,每个1 MB).
2)每页加载一个资产包(每个1 MB).
3)前两个选项中的任何一个,但从resources文件夹加载.
哪一个会更快,为什么?我知道资产包是由统一打包的,但这是否意味着里面的纹理会在加载时被预压缩并更容易在内存中?资源文件夹是否会减少加载时间?是什么赋予了?据我所知,资源文件夹加载到缓存中 - 但它是独立播放器正常使用的缓存吗?或者是这个额外的,未使用的空间?我想另一个问题是我不确定从内存加载东西和将它们存储在缓存中之间的区别.
干杯,伙计......
很难找到有关AssetBundles实际工作方式的大量信息。找不到有关如何通过游戏版本管理资产捆绑的任何解释。
基本上,我AssetBundles在“项目”窗口中有一个文件夹。我放入此文件夹中的所有资产均作为AssetBundles构建在构建目录(例如GameName / Data / AssetBundles)内的文件夹中,然后在需要时加载。
但是,当我自己构建游戏时,它是否不知道在游戏构建中不包括AssetBundles中使用的这些资产?还是我需要以某种方式排除它们?
编辑:我已经取得了一些进展。
据我了解,只有其资产驻留在构建设置中的场景中的资产才会通过游戏构建进行构建。脚本始终内置在游戏版本中(我不确定是否有解决此问题的方法,但这对我来说不是问题)。
因此,我在游戏构建中只有一个场景,它是游戏的启动对象。此场景上有一个资产管理器脚本,该脚本在中DontDestroyOnLoad指定Awake。
我的资产管理器脚本基本上只处理捆绑软件,资产和实例的加载/卸载。
我目前不太确定如何为场景构建资产捆绑包。我先使用它LoadAllAssets,然后再做LoadLevel,但是如果多个场景共享某些资产怎么办?场景构建最终会膨胀但拥有可以共享的资产副本吗?我读到依赖关系是在Unity 5中自动处理的,但是我不确定是否与此相关。
我有一个 Unity assetbundle。我在这些文件和一些数据库文件中还有更多捆绑包。有没有一种简单的方法来编辑或提取资源包的内容。
我有Yii2项目设置,我决定使用Facebook的JavaScript框架React.js,它提供了一种方便的方法来在JavaScript代码中声明HTML模板,称为JSX.
我的JavaScript看起来如下:
(function () {
'use strict';
MyBlock = React.createClass({
getInitialState: function () {
return {data: []};
},
componentDidMount: function () {
$.ajax({
url: '/api/',
dataType: 'json',
success: function (data) {
this.setState({ data: data });
}.bind(this)
});
},
render: function () {
<div class="block">
{this.props.variable}
</div>
}
});
React.render(
<ProfileQuestion />,
document.getElementById('profile_question_wrapper')
);
}());
Run Code Online (Sandbox Code Playgroud)
AssetBundle帮助我在我的视图中包含所需的库,所以我将来自CDN的React.JS和JSX文件添加到我的AssetBundle中:
class MyAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
];
public $js = …Run Code Online (Sandbox Code Playgroud) 我们需要在服务器上自动创建资源包,但在服务器上安装 Unity 并通过命令行运行它不太适合我们的服务器设计。所以我们想知道是否还有其他方法来创建资源包。您可以从常规 .Net 运行的 .Net 库将是最佳选择,但我们对您可能拥有的任何解决方案感兴趣。
我正在使用unity5.3.3,我想知道如何从资产包中获取资产,其名称相同但保存在不同的文件夹中.我的AssetBundle文件夹按以下方式设置:
MyAssets -> this Folder is packed as an AssetBundle
-ThemeOne(folder)
- Logo.png
-ThemerTwo(folder)
- Logo.Png
Run Code Online (Sandbox Code Playgroud)
当我这样做AssetBundle.LoadAssetAsync("Logo").我结束了在第一个(ThemeOne)文件夹中获取徽标.那么如何访问其他文件夹中的文件?
我刚刚创建了一个示例项目,以便您可以查看它.检查Folder Assets\AssetBundleSample\SampleAssets\Theme和脚本LoadAssets
我正在 Unity 中开发一个应用程序,用户可以在其中上传自己的 3D 模型。我一直在寻找实现此目的的方法,从所有类型加载模型的最佳方法似乎是资源包。为了在服务器上创建这些捆绑包,我想以批处理模式运行 Unity 并通过静态方法创建捆绑包。
我面临的问题是似乎不可能将脚本中的对象包含在资源包中。在编辑器中,您只需选择资源包名称,但要自动执行此操作,这是不可能的。