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 SERVER 补丁查看

    SELECT   @@VERSION as 版本情况 SELECT SERVERPROPERTY('ProductVersion') as 产品版本编号, SERVERPROPERTY('Produc ...

  2. android 代码覆盖率

    背景 项目使用的是small插件.一个app分为main和多个插件,为了统计插件的代码覆盖率. 1 修改插件 修改插件build.gradle buildTypes { release { ... } ...

  3. 【Linux】Centos7安装之后,双系统的情况下,怎么能在CentOS7下访问Windows的磁盘

    想要在CentOS7下访问Windows的NTFS格式的磁盘,需要在Linux下下载ntfs-3g步骤1: 进入root用户下,使用yum命令下载ntfs-3g.[前提是已经添加了常用源:http:/ ...

  4. Makefile学习之一

    Makefile注意: 1.Makefile由三部分组成:目标,依赖,命令: 2.命令行前必须有一个tab键作为开头: 3.定义变量:objects=main.o abc.o 使用$(objects) ...

  5. 新人补钙系列教程之:AS3事件处理--事件流

    一个flash应用程序可能会非常复杂,比如,有很多可视实例嵌套在一起,这样的话会形成一个树形结构,这个结构的根是stage,然后一级级到不同的实例,一般来说,要把这个树形结构倒过来看,即stage在顶 ...

  6. Linux查看目录大小

    du -ah --max-depth=1 a表示显示目录下所有的文件和文件夹(不含子目录) h表示以人类能看懂的方式 max-depth表示目录的深度

  7. Oracle基础 触发器

    一.触发器 触发器是当特定事件出现时自动执行的代码块.比如,每次对员工表进行增删改的操作时,向日志表中添加一条记录.触发器和存储过程是由区别的:触发器是根据某些条件自动执行的,存储过程是手动条用的. ...

  8. kettle入门(七) 之kettle增量方案(一)全量比对取增量-依据唯一标示

    引: ods有个project表来自于上游系统,数据量不大 十几万,下游系统须要此数据,而且须要每天提供截止当天的增量数据 要求每条数据给出数据变化时间及标示,即数据若是插入 有插入时间和插入标示 若 ...

  9. ASP.NET综合管理ERP系统100%源代码+所有开发文档

    该系统开发环境为:VS2010,数据库採用SQL Server,框架为ASP.NET. 源代码包含所有文档说明,代码简单易懂,凝视完整. 提示:假设没有安装水晶报表系统执行会报错,报表安装程序已经打包 ...

  10. shell脚本检测网络是否畅通

    shell初始化安装脚本执行时,需从网络上安装一些rpm包,所有需要先检测网络的畅通性, 代码 #检测网络链接&&ftp上传数据 function networkAndFtp() { ...