下载某资源文件并加载其中的所有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 动态地创 ...
随机推荐
- Get Started with Subversion using SvnX
A very important part of a development environment is source code control. Subversion is the server- ...
- 【mybatis】mybatis中的<if test=“”>test中多条件
mybatis中的<if test=“”>test中多条件 代码展示: 其中 accountCode和apiName都是ApiAllRespBean的属性 <select id=&q ...
- apache 的rewrite函数配置伪静态
配置伪静态目的:对于访问比较长的uri,利于网站搜索工具更容易记住,换句话利于SEO 在配置文件中添加或找到 <IfModule mod_rewrite.c> </IfModule& ...
- malloc,free和new,delete之间的区别
1.malloc free 是c语言里面的,不过在c++中也能使用,这个只是申请的一块内存,一般不能申请对象的内存空间:2.new delete,是c++的,申请的也是一块内存,只是这个可以申请对象. ...
- functor
I thought it would be easy and convenient to define a small functor and perform a customized sort on ...
- 利用chrony和ntp搭建时间同步服务器
利用chrony和ntp搭建时间同步服务器 环境说明 系统版本 CentOS 6.9 x86_64 Network Time Protocol(NTP,网络时间协议)用于同步它所有客户端时钟的服 ...
- bitcoin-qt忘记密码
客户端有钱包加密功能,输入密码可以增强安全性. 但是,如果你把钱包文件弄丢了,那即使设了密码,币也会丢. 关闭bitcoin-qt,把钱包文件wallet.dat 剪到其他地方(但不要删除),然后重新 ...
- 【原创】关于bug反正出现的问题可能
bug修正的问题:1. xib问题.2. 模块不清同时修改.3. svn代码合并的修改熟悉程度.4. 禁止全局格式化代码.
- EffectiveJava(7)避免使用终结方法
避免使用终结方法 1.使用终结方法会导致行为不稳定,性能降低,以及可移植性的问题.(终结线程的优先级过低) 终结方法不能保证被及时的执行(从一个对象变得不可到达开始,到中介方法被执行,所花费的时间是任 ...
- 如何安装Android SDK Emulator
1 下载并安装JDK,可以到官方网站寻找自己的对应版本下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u1-downlo ...