废话不多说  直接上代码.

从服务器下载的, 很简单

private IEnumerator Start()
{
byte[] ab = null;
int len = 0;
WWW www =null;
foreach (string item in Directory.GetFiles("TestAssetBundles"))
{
www = new WWW(@"http://localhost:15109/TestAssetBundles/"+item.Split('\\')[1]);
yield return www;
if (www.isDone)
{
ab = www.bytes;
len = ab.Length;
}
// www.Dispose();

Stream str = null;
FileInfo file = new FileInfo(Application.persistentDataPath + "/"+item.Split('\\')[1]);

if (file.Exists)
{
file.Delete();
str = file.Create();
}

if (!file.Exists)
{
str = file.Create();
}

str.Write(ab, 0, len);

Debug.Log(item.Split('\\')[1]);
str.Close();
str.Dispose();
www.Dispose();
www = null;
}

www.assetBundle.Unload(true);

从下载的路径读取

string index;

private void Start()
{
index = GameObject.FindWithTag("SceneTag").name.Split('_')[1];
StartCoroutine(LoadScene());
}

public IEnumerator LoadScene()
{
UnityWebRequest request = UnityWebRequest.GetAssetBundle(@"file://" + Application.persistentDataPath + "/" + "TestAssetBundles"); // 获取主assetbundle 和打包时候生成的文件夹的名字相同

yield return request.Send(); //开始获取

AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request); //得到主assetbundle的对象

AssetBundleManifest abmanifest = ab.LoadAsset<AssetBundleManifest>("AssetBundleManifest"); //根据主assetbundle 找到主manifest 必须叫这个名

string[] dependencies = abmanifest.GetAllDependencies("uiroot" + index + ".unity3d"); //根据abm拿到参数的assetbundle的关联的assetbundle
List<AssetBundle> test = new List<AssetBundle>();
foreach (var item in dependencies) //遍历所有关联assetbundle的名字
{

UnityWebRequest requestchild = UnityWebRequest.GetAssetBundle(@"file://" + Application.persistentDataPath + "/" + item); //获取这些关联的assetbundle
yield return requestchild.Send();

AssetBundle tempAB = DownloadHandlerAssetBundle.GetContent(requestchild);//因为不需要实例关联assetbundle这些物体(这里是一些图集) 所以只需要将他们生成到项目中就可以了,不需要拿到ab实例?????????????????这是绝对不行了, 因为你没有办法在加载后卸载!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
print(tempAB);
test.Add(tempAB);
requestchild.Dispose();
requestchild = null;

}

UnityWebRequest requestRoot = UnityWebRequest.GetAssetBundle(@"file://" + Application.persistentDataPath + "/" + "uiroot" + index + ".unity3d");
yield return requestRoot.Send();
AssetBundle abRoot = DownloadHandlerAssetBundle.GetContent(requestRoot);
GameObject go = abRoot.LoadAsset<GameObject>("UI Root" + index);

foreach (AssetBundle item in test)
{
item.Unload(false);
}

//request.Dispose();
//requestRoot.Dispose();
ab.Unload(false);
abRoot.Unload(false);
Instantiate(go);

ok在上班就不解释太多了

AssetBundle实现服务器下载并从本地读取的更多相关文章

  1. 使用xshell从远程服务器下载文件到本地

    XSHELL工具上传文件到Linux以及下载文件到本地(Windows) Xshell很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz.首先你的L ...

  2. 从Linux服务器下载文件到本地命令

    从Linux服务器下载文件夹到本地1.使用scp命令 scp /home/work/source.txt work@192.168.0.10:/home/work/ #把本地的source.txt文件 ...

  3. 从Linux服务器下载文件到本地

    通过安装xshell,连接服务器,通过以下命令可以方便的将服务器的文件下载到本地 #下载一个文件 sz filename #下载多个文件 sz filename1 filename2 #下载dir目录 ...

  4. Java 从服务器下载文件到本地(页面、后台、配置都有)

    先来看实现效果: 有一个链接如下: 点击链接下载文件:  第一种方法:Servlet实现 一.HTML页面部分: 1.HTML页面中的一个链接 <a id="downloadTempl ...

  5. 使用scp从远程服务器下载文件到本地

    [下载远程文件到本地] scp -P 6008 root@192.168.1.123:/usr/data/1.zip   /Users/abc/www [上传本地文件到远程] scp -P 6008  ...

  6. 使用“rz -be”命令上传文件至服务器;使用“sz 文件名”从服务器下载文件到本地

    注意:需要事先安装lrzsz服务 yum install -y lrzsz 因为服务器没有安装sftp服务,无法使用FileZilla.Xftp等连接服务器上传文件,这种情况可以利用rz命令上传文件. ...

  7. python urllib从远程服务器下载文件到本地

    #!/usr/bin/env python #-*-coding:utf--*-' #Filename:download_file.py import sys,os import urllib def ...

  8. Java实现从服务器下载文件到本地的工具类

    话不多说,直接上代码...... import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServlet ...

  9. java后台中处理图片辅助类汇总(上传图片到服务器,从服务器下载图片保存到本地,缩放图片,copy图片,往图片添加水印图片或者文字,生成二维码,删除图片等)

    最近工作中处理小程序宝箱活动,需要java画海报,所以把这块都快百度遍了,记录一下处理的方法,百度博客上面也有不少坑! 获取本地图片路径: String bgPath = Thread.current ...

随机推荐

  1. Python用户输入和代码注释

    一.用户输入 若你安装的是Python3.x版本,当你在Python IDLE(编辑器) 中输入以下代码: name = input('用户名:') print('Hello',name) 保存并执行 ...

  2. 错误:This function has none of DETERMINISTIC... 的解决

    问题: 在MySQL创建了一个批量插入的存储过程,在代码中调用的时候报错误信息: error code [1418];This function has none of DETERMINISTIC, ...

  3. C#基础(七)虚函数

    若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法.虚方法与非虚方法的最大不同是,虚方法的实现可以由派生类所取代,这种取代是通过方法的重写实现的(以后再讲)虚方法的特点:虚方法前不允 ...

  4. 移动端 滑动删除 swipeDelete

    功能比较简单常见,最近整理一下做备份记录.先看看线上 整体实际效果 下面是swipeDelete 用法 demo 默认参数 var defaults = { distance:80, //滑动距离 u ...

  5. win10下配置php环境变量

    下载php,解压. 比如解压到E盘,目录为"E:\PHP". 打开php目录,复制一个php.ini-development文件,改名为php.ini. 打开php.ini,将 e ...

  6. JAVA常用知识点总结---集合篇

    一.Collection 与 Collections的区别:1. Collections:java.util.Collections 是一个包装类.它包含有各种有关集合操作的静态多态方法.此类不能实例 ...

  7. ABP官方文档翻译 6.1.3 异常处理

    处理异常 介绍 启用错误处理 Non-Ajax请求 显示异常 UserFriendlyException Error模型 AJAX请求 异常事件 介绍 此文档是与ASP.NET MVC和Web API ...

  8. Spring源码情操陶冶-ComponentScanBeanDefinitionParser文件扫描解析器

    承接前文Spring源码情操陶冶-自定义节点的解析,本文讲述spring通过context:component-scan节点干了什么事 ComponentScanBeanDefinitionParse ...

  9. 给你的jQuery项目赋予Router技能吧

    现在你不会React/Vue都不好意思说自己是前端,不过我相信很多前端项目还是基于jquery类库的传统模式的,假如你有追求的态度使用过requireJs这个库,你一定思考过一个问题,或者说一种组件化 ...

  10. 除了使用URLSearchParams处理axios发送的数据,但是兼容性不好,其他的兼容方法

    在使用axios这个ajax插件的时候,我们有些时候会遇到一些问题,比如:数据格式不正确 以最简单的例子为基础(这里使用post方法): 在上面的例子中我们直接调用axios的post方法,传给后台的 ...