using System.Collections;
using System.Collections.Generic;
using UnityEngine; /// <summary>
/// LoadAssets打开某资源文件并加载其中的所有Prefab到场景中
/// </summary>
public class LoadAssets : MonoBehaviour
{
[HideInInspector]
public string address;//资源所在文件夹路径
public string fileToLoad;//资源文件名
private string manifestAssetBundleName;//Manifest文件,一般与所在文件夹名称相同
private AssetBundleManifest manifest;
private List<AssetBundle> assetBundles = new List<AssetBundle>(); private void Awake()
{
if(address.Equals(""))
return;
//Manifest文件的名称与生成的AssetBundle所在的文件夹同名
string[] ss = address.Split('/');
manifestAssetBundleName = ss[ss.Length - ];
LoadManifest(address + manifestAssetBundleName);
LoadDepend(fileToLoad); }
void OnGUI()
{
if (address.Equals(""))
return;
//第1步:读取Manifest
if (GUILayout.Button("地图加载(选择map.unity3d)"))
{
StartCoroutine(LoadObj(address, fileToLoad));
Caching.CleanCache();
}
}
//同步下载并读取Manifest文件
public void LoadManifest(string mainfestpath)
{
//Debug.Log("LoadManifest:"+mainfestpath);
AssetBundle manifestBundle = AssetBundle.LoadFromFile(mainfestpath);
if (manifestBundle != null)
{
manifest = (AssetBundleManifest)manifestBundle.LoadAsset("AssetBundleManifest");
}
}
//获取资源所依赖的资源并下载
void LoadDepend(string assetName)
{
string[] dps = manifest.GetAllDependencies(assetName);
for (int i = ; i < dps.Length; i++)
{
StartCoroutine(LoadAsset(address, dps[i]));
}
}
//下载资源
IEnumerator LoadAsset(string url, string fileName)
{
//Debug.Log("LoadAsset:" + url+" "+fileName);
WWW www = WWW.LoadFromCacheOrDownload("file://" + url + fileName, manifest.GetAssetBundleHash(fileName));
yield return www;
assetBundles.Add(www.assetBundle);
www.Dispose();
}
//下载并实例化游戏对象
IEnumerator LoadObj(string url, string fileName)
{
//Debug.Log("LoadOBJ:" + url + " " + fileName); WWW www = WWW.LoadFromCacheOrDownload("file://" + url + fileName, manifest.GetAssetBundleHash(fileName));
yield return www;
string[] AssetsNames = www.assetBundle.GetAllAssetNames();
foreach (string m in AssetsNames)
{
GameObject prefab = www.assetBundle.LoadAsset(m) as GameObject;
GameObject obj = GameObject.Instantiate(prefab);
} assetBundles.Add(www.assetBundle);
www.Dispose();
UnloadUnuseAssetBundle();
}
//清理未使用资源所占用的内存
void UnloadUnuseAssetBundle()
{
foreach (var item in assetBundles)
{
item.Unload(false);
}
}
}

下载某资源文件并加载其中的所有Prefab到场景中的更多相关文章

  1. HTML页面处理以及资源文件的加载

    Javascript 异步加载详解 这篇文章很详细的介绍了HTML的页面处理以及资源文件的加载. 本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading ...

  2. 白鹭引擎 - 资源文件的加载 ( RES, loadConfig, loadGroup )

    class Main extends egret.DisplayObjectContainer { public constructor() { super(); this.addEventListe ...

  3. Web资源文件的加载

    一.关于页面跳转的一下几种方法: package com.gqx.load; import java.io.IOException; import java.io.PrintWriter; impor ...

  4. 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件

    [源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...

  5. UNITY_资源路径与加载外部文件

    UNITY_资源路径与加载外部文件 https://www.tuicool.com/articles/qMNnmm6https://blog.csdn.net/appppppen/article/de ...

  6. 【Cocos2d-Js基础教学(5)资源打包工具的使用及资源的异步加载处理】

    TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包. 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 1,节省图片资源实际大小 ...

  7. Unity3d Web3d资源的动态加载

    Unity3d Web3d资源的动态加载 @灰太龙 参考了宣雨松的博客,原文出处http://www.xuanyusong.com/archives/2405,如果涉及到侵权,请通知我! Unity3 ...

  8. js文件 与 css文件 异步加载

    使用lazyload 异步加载css js 文件. 提升页面初始化的速度,减少卡顿时间 , 下面是 使用方法 与 lazyload.js 源码 (中文注释) 调用方法后. 会追加到 head 标签末尾 ...

  9. 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间

    [源码下载] 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 作者:webabcd 介绍速战速决 之 PHP 动态地创 ...

随机推荐

  1. SQL 序号列ROW_NUMBER,RANK,DENSE_RANK、NTILE

    原文:SQL 序号列ROW_NUMBER,RANK,DENSE_RANK.NTILE SQL 2005新增加相关函数 : ROW_NUMBER,RANK,DENSE_RANK.NTILE 窗口函数 O ...

  2. superobject使用方法

    superobject使用方法 ISuperObject.AsObject 可获取一个 TSuperTableString 对象. TSuperTableString 的常用属性: count.Get ...

  3. hive参数——深入浅出学Hive

    第一部分:Hive 参数 hive.exec.max.created.files •说明:所有hive运行的map与reduce任务可以产生的文件的和 •默认值:100000  hive.exec.d ...

  4. Hash history cannot PUSH the same path; a new entry will not be added to the history stack

    这个是reactr-router的一个提示,当前路由下的history不能push相同的路径.只有开发环境存在,生产环境不存在,目前还没看到官方有去掉的意思.看不惯的话可以采取一些方法关掉这个提示.具 ...

  5. ElasticSearch的内存设置

    编辑ElasticSearch中bin目录下 vi elasticsearch中 加上   export ES_HEAP_SIZE=24g 修改配置文件 config/elasticsearch.ya ...

  6. JWT笔记(2)

    上文对JWT模块进行了一个简单的分析.这篇文章稍微做出一些深入的了解. 一,Header篡改攻击 因为JWT的Header是强制有效并且是明文传输(Base64URL编码,几乎等同于明文).那么恶意用 ...

  7. shell中字符串截取

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var="User:123//321:/home/dir" 1. # 号截取,删除左边字符,保留右边字符. [root@z ...

  8. 搭建Drupal-8.5.3

    环境说明 系统版本    CentOS 6.9 x86_64 软件版本    yum安装nginx 1.10.2 yum安装php 7.2.6(当前的最新版本) yum安装mysql 5.5.60 d ...

  9. Jenkins 无法下载插件的解决办法

    有时候在安装插件时可能会出现下图的问题: 这应该是由于天朝的墙导致的,所以笔者就用了手动安装的方式 到https://wiki.jenkins-ci.org/display/JENKINS/Plugi ...

  10. Spring声明式事务的配置方式

    1.事务的特性   原子性:事务中的操作是不可分割的一部分   一致性:要么同时成功,要么同时失败(事务执行前后数据保持一致)   隔离性:并发互不干扰     持久性:事务一旦被提交,它就是一条持久 ...