- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道 AssetBundle 已经在缓存中。这通常通过 Caching.IsVersionCached
函数完成。
Unity 2017.1 不再支持 Caching.IsVersionCached(string url, int version)
函数重载。
Unity 2017.3 建议我使用 Caching.IsVersionCached(string url, Hash128 hash)
重载。
我不知道Hash128
是什么以及如何获取和使用它。什么是 Hash128
,您如何从 AssetBundle 中获取它?
感谢您的回答。
但我无法解决我的问题。
这是我的代码
for (int i = 0; i < assetInfoList.Count; i++){
while (!Caching.ready)
yield return null;
string url = GetUrl(assetInfoList[i].assetbundle_name);
string keyName = url + assetInfoList[i].version_no.ToString();
using (UnityWebRequest request = UnityWebRequest.GetAssetBundle(url,(uint)assetInfoList[i].version_no, 0))
{
if (Caching.IsVersionCached(url, assetInfoList[i].version_no) == true)
continue;
if (i == 0)
{
string wifiConnectRecommend = Message.Ins.WIFI_ONLY;
PopUpManager.Instance.PopUp_YesORNoForAssetBundle(wifiConnectRecommend.ToString(), ClickWifi, availableBytes, totalBytes);
while (!SceneManager.Ins.isWifiUseConfirm)
yield return null;
}
request.SendWebRequest();
while (request.isDone == false)
{
progressbar.value = request.downloadProgress;
currentCount.text = countString + " (" + (request.downloadProgress * 100).ToString("N2") + "%)";
yield return null;
}
if (request.error != null)
{
Debug.Log("www.error");
}
else
{
AssetBundleRef abRef = new AssetBundleRef(url, assetInfoList[i].version_no);
abRef.assetBundle = DownloadHandlerAssetBundle.GetContent(request);
dictAssetBundleRefs.Add(keyName, abRef);
}
}
}我的目的是当 assetbundle 已经在缓存中时,继续并需要下载,在 PopUp_YesORNoForAssetBundle 上设置。
hash128在检查assetbundle下载或版本检查时需要。
但在您的解释中,hash128 仅在 assetbundle 加载或上次资源文件夹中保存 list 文件后获取。
我想知道如何检查 assetbunle 是否在缓存中。
如果你提出了方法,我真的很感谢你。
最佳答案
but I don't know what is hash128
Hash128
表示 AssetBundle 文件的哈希值,可以在下载时更轻松地比较 AssetBundle 文件版本。
I can't find how to use hash128
文档中没有关于如何执行此操作的示例。以下是三种获取Hash128
的方法.使用哪一个取决于 AssetBundle
所在位置的条件以及是否要下载它以检查 Hash128
或不 。在您的情况下,#1 可能是您正在寻找的内容。
1。 在AssetBundle构建期间从编辑器获取Hash128
然后保存到Resources文件夹:
构建您的 AssetBundle 时与 BuildPipeline.BuildAssetBundles
函数,此函数返回 AssetBundleManifest
.您可以获得Hash128
通过使用 AssetBundleManifest.GetAssetBundleHash
功能。转换 Hash128
到带有 Hash128.ToString()
的字符串然后将其保存到 Resources 文件夹,以便您可以在运行时访问它。
将构建 AssetBundle 并将 Hash128
保存到 Resources 文件夹的 Editor 构建脚本示例:
[MenuItem("Assets/Build AssetBundle")]
static void ExportResource()
{
string folderName = "AssetBundles";
string filePath = Path.Combine(Application.streamingAssetsPath, folderName);
AssetBundleManifest assetMf = BuildPipeline.BuildAssetBundles(filePath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
//Get Hash128 from the AssetBundleManifest
Hash128 hash128 = assetMf.GetAssetBundleHash("AssetBundles");
//Get the Hash128 as string
string data = hash128.ToString();
string path = "Assets/Resources/AssetInfo/AssetBundleInfo.txt";
//Save the Hash128 to the Resources folder
using (FileStream fileStream = new FileStream(path, FileMode.Create))
{
using (StreamWriter writer = new StreamWriter(fileStream))
{
writer.Write(data);
}
}
UnityEditor.AssetDatabase.Refresh();
}
在运行时加载 Hash128
的简单函数:
Hash128 getHash128(string path)
{
//Load from the Resources folder
TextAsset txtAsset = (TextAsset)Resources.Load(path, typeof(TextAsset));
string hash128 = txtAsset.text;
return Hash128.Parse(hash128);
}
使用方法:
//Load Hash128 from the Resources folder
Hash128 tempHash128 = getHash128("AssetInfo/AssetBundleInfo");
//Pass to the IsVersionCached function
Caching.IsVersionCached("yourUrl", tempHash128);
你也可以根据需要用json表示并保存很多Hash128
。
2。 从服务器下载 AssetBundle,然后在运行时获取 Hash128
,无需 Resources 文件夹。不幸的是,您必须先使用此方法下载 AssetBundle,然后才能获取其 Hash128
。下载后,将数据加载为 AssetBundleManifest
,然后使用 AssetBundleManifest.GetAssetBundleHash
函数从中获取 Hash128
。然后您可以保存此 Hash128
以备后用。
下面的示例应该从 AssetBundle url 下载并提取 Hash128
。不涉及编辑器代码。
IEnumerator downloadAssetBundle(string url)
{
UnityWebRequest www = UnityWebRequest.GetAssetBundle(url);
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
//Get the AssetBundle
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(www);
AssetBundleRequest asset = bundle.LoadAssetAsync<AssetBundleManifest>("assetManifestName");
yield return asset;
//Get the AssetBundleManifest
AssetBundleManifest loadedAssetMf = asset.asset as AssetBundleManifest;
//Get Hash128 from the AssetBundleManifest
Hash128 tempHash128 = loadedAssetMf.GetAssetBundleHash("");
//Pass to the IsVersionCached function
Caching.IsVersionCached("yourUrl", tempHash128);
}
}
3。 从文件系统中的AssetBundle中获取Hash128
。如果你已经knew AssetBundle 的路径,从该路径加载 AssetBundle,然后将数据加载为 AssetBundleManifest
,最后使用 AssetBundleManifest.GetAssetBundleHash
从中获取 Hash128
功能。然后您可以保存此 Hash128
以备后用。
这显示了如何从 StreamingAsset 路径加载 AssetBundle 并获取其 Hash128
:
IEnumerator loadAssetManifest(string assetBundleName, string assetManifestName)
{
string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "AssetBundles");
filePath = System.IO.Path.Combine(filePath, assetBundleName);
var assetBundleCreateRequest = AssetBundle.LoadFromFileAsync(filePath);
yield return assetBundleCreateRequest;
AssetBundle asseBundle = assetBundleCreateRequest.assetBundle;
AssetBundleRequest asset = asseBundle.LoadAssetAsync<AssetBundleManifest>(assetManifestName);
yield return asset;
//Get the AssetBundleManifest
AssetBundleManifest loadedAssetMf = asset.asset as AssetBundleManifest;
//Get Hash128 from the AssetBundleManifest
Hash128 tempHash128 = loadedAssetMf.GetAssetBundleHash("");
//Pass to the IsVersionCached function
Caching.IsVersionCached("yourUrl", tempHash128);
}
关于c# - 从 AssetBundle 获取 Hash128 用于 Caching.IsVersionCached 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48179265/
在提出问题之前,我将解释我需要什么样的要求。 在我的游戏中,玩它需要很多纹理。由于这一点以及 ipa 大小(iOS)的限制,我认为使用assetbundle 是必须的。因为现有的代码实现,我创建了 A
我正在 Unity 中为 iPhone 开发一个 AR 应用程序,它从网络服务器下载 Assets 包并将它们附加到图像目标。到目前为止,几乎一切正常——除了当应用程序尝试加载 Assets 包时,我
我想在 AR 相机中播放视频。我总共有 10 个视频和一个视频播放器。我正在从服务器下载视频播放器作为名称为 videoplayer.unit3d 的 Assets 包并存储到 SD 卡中。当我扫描
我正在使用 UnityWebRequest 从服务器下载 assetBundle,它在 unity 编辑器中运行良好,但在 andriod 中它给出空值,有人可以帮忙吗 public IEnumera
据此manual我可以将脚本包含为二进制数据并通过反射加载它们。我了解所有步骤,除了一个:如何编译脚本以获取二进制数据以将其存储在 .binary 文件中?有教程/帮助吗? 更新: 实际问题可以重述为
我是 Unity 的新手,我开始在我的项目中使用 AssetBundle 从服务器下载它们。我使用 UnityWebRequestAssetBundle 下载资源,因为 WWW 已过时。一切正常,我可
我有一个非常简单的 AssetBundle: use yii\web\AssetBundle; /** * ImagizerAsset */ class ImagizerAsset extends
我正在做一个项目,它使用 Unity WebGL 以 3D 形式显示不同的机器/零件/..,这些零件或机器由用户选择,然后加载到场景中(目前只有一个场景,但我们可能还想动态加载场景)。 由于有大量选择
我无法在 iOS 构建中使用 Unity Assetbundle。 在 Unity 中我构建了 Assets 包: using UnityEditor; public class CreateAsse
编辑: 这个问题是关于使用 AssetBundle 的,而那个问题 ( List of files in flutter ) 是关于使用目录的。它们因类别不同而不同。另外:我删除了一个部分,它可能与上
题: 我想在完成下载文件之前获取 assetBundle 的大小。我可以向用户显示剩余时间。在Unity2018.2中,我们可以得到吗?文件大小 或 下载文件大小 让我乘以 进度 ?或者还有其他方法来
我对来自 unity 的 Assets 包有疑问。我有一个包含多个 Assets 的 bundle ,名称相同但扩展名不同,例如 bonus.png bonus.prefab。 当我尝试实例化一个名为
本文介绍了使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势,分享给大家,具体如下: 官方文档:http://www.yiiframework.com/doc-
很难找到有关 AssetBundles 实际工作原理的大量信息。找不到任何有关如何通过游戏构建管理资源包的说明。 基本上,我的项目窗口中有一个名为 AssetBundles 的文件夹。我放入此文件夹中
我已将一些迷你游戏分离到另一个项目中,以便将它们全部加载到一个项目中。我已经使用Unity 2018.4.9版本成功创建了资源包并将它们放入StreamingAssets文件夹中。 Unity编辑器成
我正在尝试为我目前正在开发的游戏测试一些 AssetBundle。我想使用它是因为我不想让游戏占用太多空间。我仍然不知道服务器如何工作以及如何将它们上传到那里。我正在搜索如何执行此操作,并在此处找到了
我试图在运行时将一个已经创建的 FBX 对象加载到场景中,我四处搜索并发现可以使用 assetbundle 来执行此操作。我试过这段代码,但它似乎没有实例化场景中的对象,也没有弹出错误。 这是代码 u
我想知道 AssetBundle 已经在缓存中。这通常通过 Caching.IsVersionCached 函数完成。 Unity 2017.1 不再支持 Caching.IsVersionCache
我正在以这种方式使用我的 AppAsset。 AppAsset.php .但是,没有 type='text/css' . 如何添加type='text/css'我所有的 CSS? 最佳答案 @Mop
我的托管帐户存在写入权限问题。在布局文件中添加脚本和链接标签而不是使用AssetBundle或registerJs可以吗? 有什么优点和缺点? 编辑: 我正在使用 Google App Engine,
我是一名优秀的程序员,十分优秀!