下载某资源文件并加载其中的所有Prefab到场景中
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到场景中的更多相关文章
- HTML页面处理以及资源文件的加载
Javascript 异步加载详解 这篇文章很详细的介绍了HTML的页面处理以及资源文件的加载. 本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading ...
- 白鹭引擎 - 资源文件的加载 ( RES, loadConfig, loadGroup )
class Main extends egret.DisplayObjectContainer { public constructor() { super(); this.addEventListe ...
- Web资源文件的加载
一.关于页面跳转的一下几种方法: package com.gqx.load; import java.io.IOException; import java.io.PrintWriter; impor ...
- 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
[源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...
- UNITY_资源路径与加载外部文件
UNITY_资源路径与加载外部文件 https://www.tuicool.com/articles/qMNnmm6https://blog.csdn.net/appppppen/article/de ...
- 【Cocos2d-Js基础教学(5)资源打包工具的使用及资源的异步加载处理】
TexturePacker是纹理资源打包工具,支持Cocos2dx的游戏资源打包. 如果用过的同学可以直接看下面的资源的异步加载处理 首先为什么用TexturePacker? 1,节省图片资源实际大小 ...
- Unity3d Web3d资源的动态加载
Unity3d Web3d资源的动态加载 @灰太龙 参考了宣雨松的博客,原文出处http://www.xuanyusong.com/archives/2405,如果涉及到侵权,请通知我! Unity3 ...
- js文件 与 css文件 异步加载
使用lazyload 异步加载css js 文件. 提升页面初始化的速度,减少卡顿时间 , 下面是 使用方法 与 lazyload.js 源码 (中文注释) 调用方法后. 会追加到 head 标签末尾 ...
- 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间
[源码下载] 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 作者:webabcd 介绍速战速决 之 PHP 动态地创 ...
随机推荐
- sqlserver 出现sql被锁时,查看加锁和被锁的sql
原文:sqlserver 出现sql被锁时,查看加锁和被锁的sql DECLARE @spid INT DECLARE @blk INT DECLARE @count INT DECLARE @ind ...
- Android Facebook分享功能实现
1.下载 Facebook SDK https://developers.facebook.com/docs/Android?locale=zh_CN 2.在facebook下设置app的相关信息 3 ...
- Android反编译调试源码
Android反编译调试源码 1. 反编译得到源码 直接在windows 命令行下输入命令java -jar apktool_2.0.0.jar d -d 小米运动_1.4.641_1058.apk ...
- mysql truncate drop delete的区别
以下讨论,针对于mysql数据库. 为什么会想到这个问题呢? 因为项目中需要清除数据库的数据,而且需要实现自增的主键从0开始计数.所以想到总结一个几个常用的删除语法的差异. 可以做一个测试 建一个带有 ...
- jq和js中click 事件的几种方式总结和click事件的累加问题解决办法
1:常见的三种绑定click事件: 第一种:$("#click").click(function(){ alert("Hello World click") ...
- iptables利用connlimit模块限制同一IP连接数
connlimit功能: connlimit模块允许你限制每个客户端IP的并发连接数,即每个IP同时连接到一个服务器个数. connlimit模块主要可以限制内网用户的网络使用,对服务器而言则可以限制 ...
- ssh免密码登录的注意事项
centos配置完免密码登录(注意修改配置文件,/etc/ssh/sshd_config),合并完公钥后,有的时候还得需要输入密码.这时候应该检查一下authorized_keys的权限问题.本机的正 ...
- 利用excel去除txt文本中重复项
2017-04-10 1.要去重的文件,点击右键,选择程序. 2.选择excel表格或者wps表格. 3.excel表格去重:选中单元格——数据——筛选——高级筛选——选择不重复记录——确定 wps表 ...
- Unity载入和内存管理机制
Unity几种动态载入Prefab方式的差异: 事实上存在3种载入prefab的方式: 一是静态引用,建一个public的变量,在Inspector里把prefab拉上去,用的时候instantiat ...
- [GraphQL] Query a GraphQL API with graphql-request
To query a GraphQL API, all you need to do is send an HTTP request that includes the query operation ...