首页 > 其他分享 >Assetbundle打包及加载入门详解(三)

Assetbundle打包及加载入门详解(三)

时间:2023-01-05 13:04:41浏览次数:53  
标签:www url WWW myload Assetbundle using PathA 详解 加载


                         主要讲Assetbundle的网络加载方式

之前所讲的都是AssetBundle.LoadFromFile的方法,这是直接从硬盘上加载,而且属于同步加载。

WWW.LoadFromCacheOrDownload

呵呵哒,这个方法现在已经弃用了。然而我用的是5.4的版本,还是可以用的。

Assetbundle打包及加载入门详解(三)_System

解释一下方法里的参数,第一个url就是下载的路径,第二个version是指版本号,如果要下载的东西的版本和本地已存在的版本号一样那就用本地,如果不一样那就会从地址里下载到本地。

此方法应用的代码如下:

看完下面代码,可能会想为什么要用这方法而不是 using (WWW www = new WWW(url))的方法呢? ??using (WWW www = new WWW(url))方法也是可以使用的(亲测),但是官网解释的很清楚那就是LoadFromCacheOrDownload() must be used in place of "new WWW (url)" in order to utilize caching functionality.,为了处理缓存问题,而new WWW是不具备处理缓存的功能的。注意这个方法只能用来接收AssetBundles的文件不适合其他类型的缓存。

特别注意Note: URL must be '%' escaped. 路径里是不能使用%的。

using UnityEngine;
using System.Collections;

public class loadtest : MonoBehaviour {


public string url;
string PathA;
// Use this for initialization
private void Awake()
{
PathA = System.Environment.CurrentDirectory;

//因为测试是使用的本地路径,本地路径的斜杠是“\”所以需要用“/”来代替

if (PathA.Contains("\\"))
{
PathA = PathA.Replace("\\", "/");
}

url = "file://" + PathA + "/AllAssets/test.assetbundle";
Debug.Log(url);
}
IEnumerator LoadAssetsFun()
{
while (!Caching.ready)
yield return null;

var www = WWW.LoadFromCacheOrDownload(url,0);
yield return www;

if (!string .IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
yield return null;
}
AssetBundle myload = www.assetBundle;
if(myload==null)
{
Debug.Log("下载错误");
}

Object[] obj = myload.LoadAllAssets();

foreach (Object ass in obj)
{
Debug.Log(ass.name);
Instantiate(ass);
}
myload.Unload(false);

}

private void OnGUI()
{
Rect rect = new Rect(100f, 100f, 200f, 200f);
if (GUI.Button(rect, "Load"))
{
StartCoroutine(LoadAssetsFun());
}
}

}

UnityWebRequest 

该方法为新版的方法,最推荐使用它来代替www的方法,因为该方法可以减小内存开销。

先用UnityWebRequest.GetAssetBundle进行下载,再用DownloadHandlerAssetBundle.GetContent(UnityWebRequest)获取AB对象

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class loadtest : MonoBehaviour {


public string url;
string PathA;
// Use this for initialization
private void Awake()
{
PathA = System.Environment.CurrentDirectory;

//因为测试是使用的本地路径,本地路径的斜杠是“\”所以需要用“/”来代替

if (PathA.Contains("\\"))
{
PathA = PathA.Replace("\\", "/");
}

url = "file://" + PathA + "/AllAssets/test.assetbundle";
Debug.Log(url);
}


IEnumerator LoadAssetsFun()
{

UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(url, 0);
yield return request.Send();
AssetBundle myload = DownloadHandlerAssetBundle.GetContent(request);

Object[] obj = myload.LoadAllAssets();

foreach (Object ass in obj)
{
Debug.Log(ass.name);
Instantiate(ass);
}
myload.Unload(false);

}

private void OnGUI()
{
Rect rect = new Rect(100f, 100f, 200f, 200f);
if (GUI.Button(rect, "Load"))
{
StartCoroutine(LoadAssetsFun());
}
}

}

 

标签:www,url,WWW,myload,Assetbundle,using,PathA,详解,加载
From: https://blog.51cto.com/u_8378185/5990717

相关文章

  • Assetbundle打包及加载入门详解(二)
    接着上篇,本节写如何更加科学的打包,以及打包中的一些依赖关系。科学打包:一般来说会把物体打成一个assetbundle包,把材质打成另个包,然后在加载的时候都加载出来。当然如果是有......
  • VRTK插件之瞬移详解
    在 VRTK插件中有两个瞬移的方法。所有的瞬移都是由手柄发出一条线,线与地面的交点就是瞬移所到的目的地。一个是VRTK_BasicTeleport,另一个是VRTK_HeightAdjustTeleport。下......
  • Unity3d碰撞器与触发器的区别详解(rigidbody移动和charactercontroller移动区别)
    Rigidbody或者charactercontroller移动才可以用collider的碰撞。正文:要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动。碰撞体是物理......
  • Assetbundle打包及加载入门详解(一)
    Assetbundle是unity的一种加载方式。这种加载可以从互联网上或者本地的文件夹中加载。要求被加载的文件必须是Assetbundle定义的格式首先制作Assetbundle:在project的Editor......
  • 一文详解RocketMQ的存储模型
    摘要:RocketMQ优异的性能表现,必然绕不开其优秀的存储模型。本文分享自华为云社区《终于弄明白了RocketMQ的存储模型》,作者:勇哥java实战分享。RocketMQ优异的性能表现,......
  • git commit 详解
    gitcommit命令用来将本地暂存的修改提交到版本库。gitcommit-m'提交信息'。我们用的比较多的应该就是-m参数。添加提交信息。经常手抖的同学可能会知道,gitcommit......
  • 详解kubernetes五种暴露服务的方式
    部署完服务终将是为了访问,那么kubernetes中service和ingress都可以将集群内部的服务能够支持外部访问。service可以让一组Pod(称为“后端”)为集群内的其他Pod(称为“前端”......
  • Day 06 模块加载机制
    模块加载机制一、优先从缓存中加载模块在第一次加载后会被缓存,多次调用require()不会导致模块的代码被执行多次不论内置模块、自定义模块、第三方模块都会从缓存中加载......
  • css中word-break和word-wrap用法详解
    css中的word-break和word-wrap属性在遇到中文和英文时的表现是不一样的,所以我们会在这些属性遇到中文、英文时分别进行说明。常用于换行word-wrap:break-word;word-b......
  • MapReduce详解
    1 MapReduce是什么​​Hadoop​---MapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具......