1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. /// <summary>
  6. /// LoadAssets打开某资源文件并加载其中的所有Prefab到场景中
  7. /// </summary>
  8. public class LoadAssets : MonoBehaviour
  9. {
  10. [HideInInspector]
  11. public string address;//资源所在文件夹路径
  12. public string fileToLoad;//资源文件名
  13. private string manifestAssetBundleName;//Manifest文件,一般与所在文件夹名称相同
  14. private AssetBundleManifest manifest;
  15. private List<AssetBundle> assetBundles = new List<AssetBundle>();
  16.  
  17. private void Awake()
  18. {
  19. if(address.Equals(""))
  20. return;
  21. //Manifest文件的名称与生成的AssetBundle所在的文件夹同名
  22. string[] ss = address.Split('/');
  23. manifestAssetBundleName = ss[ss.Length - ];
  24. LoadManifest(address + manifestAssetBundleName);
  25. LoadDepend(fileToLoad);
  26.  
  27. }
  28. void OnGUI()
  29. {
  30. if (address.Equals(""))
  31. return;
  32. //第1步:读取Manifest
  33. if (GUILayout.Button("地图加载(选择map.unity3d)"))
  34. {
  35. StartCoroutine(LoadObj(address, fileToLoad));
  36. Caching.CleanCache();
  37. }
  38. }
  39. //同步下载并读取Manifest文件
  40. public void LoadManifest(string mainfestpath)
  41. {
  42. //Debug.Log("LoadManifest:"+mainfestpath);
  43. AssetBundle manifestBundle = AssetBundle.LoadFromFile(mainfestpath);
  44. if (manifestBundle != null)
  45. {
  46. manifest = (AssetBundleManifest)manifestBundle.LoadAsset("AssetBundleManifest");
  47. }
  48. }
  49. //获取资源所依赖的资源并下载
  50. void LoadDepend(string assetName)
  51. {
  52. string[] dps = manifest.GetAllDependencies(assetName);
  53. for (int i = ; i < dps.Length; i++)
  54. {
  55. StartCoroutine(LoadAsset(address, dps[i]));
  56. }
  57. }
  58. //下载资源
  59. IEnumerator LoadAsset(string url, string fileName)
  60. {
  61. //Debug.Log("LoadAsset:" + url+" "+fileName);
  62. WWW www = WWW.LoadFromCacheOrDownload("file://" + url + fileName, manifest.GetAssetBundleHash(fileName));
  63. yield return www;
  64. assetBundles.Add(www.assetBundle);
  65. www.Dispose();
  66. }
  67. //下载并实例化游戏对象
  68. IEnumerator LoadObj(string url, string fileName)
  69. {
  70. //Debug.Log("LoadOBJ:" + url + " " + fileName);
  71.  
  72. WWW www = WWW.LoadFromCacheOrDownload("file://" + url + fileName, manifest.GetAssetBundleHash(fileName));
  73. yield return www;
  74. string[] AssetsNames = www.assetBundle.GetAllAssetNames();
  75. foreach (string m in AssetsNames)
  76. {
  77. GameObject prefab = www.assetBundle.LoadAsset(m) as GameObject;
  78. GameObject obj = GameObject.Instantiate(prefab);
  79. }
  80.  
  81. assetBundles.Add(www.assetBundle);
  82. www.Dispose();
  83. UnloadUnuseAssetBundle();
  84. }
  85. //清理未使用资源所占用的内存
  86. void UnloadUnuseAssetBundle()
  87. {
  88. foreach (var item in assetBundles)
  89. {
  90. item.Unload(false);
  91. }
  92. }
  93. }

下载某资源文件并加载其中的所有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. Get Started with Subversion using SvnX

    A very important part of a development environment is source code control. Subversion is the server- ...

  2. 【mybatis】mybatis中的<if test=“”>test中多条件

    mybatis中的<if test=“”>test中多条件 代码展示: 其中 accountCode和apiName都是ApiAllRespBean的属性 <select id=&q ...

  3. apache 的rewrite函数配置伪静态

    配置伪静态目的:对于访问比较长的uri,利于网站搜索工具更容易记住,换句话利于SEO 在配置文件中添加或找到 <IfModule mod_rewrite.c> </IfModule& ...

  4. malloc,free和new,delete之间的区别

    1.malloc free 是c语言里面的,不过在c++中也能使用,这个只是申请的一块内存,一般不能申请对象的内存空间:2.new delete,是c++的,申请的也是一块内存,只是这个可以申请对象. ...

  5. functor

    I thought it would be easy and convenient to define a small functor and perform a customized sort on ...

  6. 利用chrony和ntp搭建时间同步服务器

    利用chrony和ntp搭建时间同步服务器 环境说明 系统版本    CentOS 6.9 x86_64 Network Time Protocol(NTP,网络时间协议)用于同步它所有客户端时钟的服 ...

  7. bitcoin-qt忘记密码

    客户端有钱包加密功能,输入密码可以增强安全性. 但是,如果你把钱包文件弄丢了,那即使设了密码,币也会丢. 关闭bitcoin-qt,把钱包文件wallet.dat 剪到其他地方(但不要删除),然后重新 ...

  8. 【原创】关于bug反正出现的问题可能

    bug修正的问题:1. xib问题.2. 模块不清同时修改.3. svn代码合并的修改熟悉程度.4. 禁止全局格式化代码.

  9. EffectiveJava(7)避免使用终结方法

    避免使用终结方法 1.使用终结方法会导致行为不稳定,性能降低,以及可移植性的问题.(终结线程的优先级过低) 终结方法不能保证被及时的执行(从一个对象变得不可到达开始,到中介方法被执行,所花费的时间是任 ...

  10. 如何安装Android SDK Emulator

    1 下载并安装JDK,可以到官方网站寻找自己的对应版本下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u1-downlo ...