http://blog.csdn.net/damenhanter/article/details/50273279

项目里面的许多资源都是从资源服务器加载的,这样子可以减小客户端的包大小。

所以我们需要一个专门的类来管理下载资源。

资源分很多类型,如:json表,txt文件,p_w_picpath文件,二进制文件,UIAtlas图集,AssetBundle等。


所以,首先创建一个管理资源文件类型的类LoadFileType。 其中文件类型可以用枚举来表示,也可以用类成员常量来表示。

此处使用类成员常量:


[csharp] view plaincopy在CODE上查看代码片派生到我的代码片

  1. using UnityEngine;  

  2. using System.Collections;  

  3.   

  4.   

  5. namespace AssemblyCSharp {  

  6.     public class LoadFileType {  

  7.           

  8.         public const string IMAGE = "p_w_picpath";  

  9.         // unity3d文件格式  

  10.         public const string UNITY3D = "unity3d";  

  11.         // 模块资源打包格式  

  12.         public const string MODULE_RESOURCE = "moduleResource";  

  13.           

  14.         public const string BINARY = "binary";  

  15.   

  16.         public const string TXT = "txt";  

  17.   

  18.         public const string JSON = "json";  

  19.         // fbx打包的assetBundle格式文件  

  20.         public const string FBX = "fbx";  

  21.   

  22.         public const string AUDIO = "audio";  

  23.         // 字体文件  

  24.         public const string FONT = "font";  

  25.         // 二进制文件(用于后台更新)  

  26.         public const string BINARY_BG = "binary_bg";  

  27.   

  28.     }  

  29. }  




接下来需要创建一个类,用来管理单个下载任务,unity3d下载都是使用WWW来下载,我们要创建的类需要具有以下功能:

① 使用WWW下载资源。

② 具备委托回调接口,方便调用这个类的对象能够接收到反馈,初步回调需要:下载完成后的回调,出现错误的回调,下载进程的回调。

③ 超时设置,超过一定时间则被认定下载任务失败。

④ 除此之外,还需记录本次下载任务的URL、以及所下载资源的fileType。

根据以上条件,这个类大致为:

// LoadReques.cs


[csharp] view plaincopy在CODE上查看代码片派生到我的代码片

  1. /** 

  2.  * 下载任务 

  3.  * create by chensh 2014.10.27 10:31 

  4.  */  

  5.   

  6. using UnityEngine;  

  7. using System.Collections;  

  8. using System.Collections.Generic;  

  9.   

  10. namespace AssemblyCSharp {  

  11.     public class LoadRequest {  

  12.   

  13.         public delegate void DownCompleteDelegate(LoadParam param);  

  14.         public delegate void ErrorDelegate(LoadRequest request);  

  15.         public delegate void ProcessDelegate(float processValue, int fileTotalSize = 0);  

  16.   

  17.   

  18.         public DownCompleteDelegate completeFunction;  

  19.         public ErrorDelegate errorFunction;  

  20.         public ProcessDelegate processFunction;  

  21.   

  22.   

  23.         public const int TIME_OUT_FRAMES = 300;  

  24.         private int _loadTotalFrames = 0; // 加载的总帧数  

  25.         public bool isTimeOut = false;  

  26.         public bool alreadyDeal = false;  

  27.   

  28.         public string requestURL;  

  29.         public string fileType;  

  30.         public WWW wwwObject = null;  

  31.         public List<object> customParams = new List<object>();  

  32.         public int priotiry = LoadPriority.NORMAL;  

  33.           

  34.   

  35.         public LoadRequest(string url,  object customParam = nullstring type = "", DownCompleteDelegate completeFunc = null, ErrorDelegate errorFunc = null, ProcessDelegate processFunc = null) {  

  36.             requestURL = url;  

  37.             fileType = type;  

  38.   

  39.             completeFunction = completeFunc;  

  40.             if (completeFunc != null)  

  41.                 customParams.Add(customParam);  

  42.             if (errorFunc != null)   

  43.                 errorFunction = errorFunc;  

  44.             if (processFunc != null)   

  45.                 processFunction = processFunc;  

  46.               

  47.             wwwObject = new WWW(requestURL);  

  48.             wwwObject.threadPriority = ThreadPriority.Normal;  

  49.         }  

  50.   

  51.         public int loadTotalFrames {  

  52.             get {  

  53.                 return _loadTotalFrames;  

  54.             }  

  55.             set {  

  56.                 _loadTotalFrames = value;  

  57.                 if (_loadTotalFrames > LoadRequest.TIME_OUT_FRAMES)  

  58.                     isTimeOut = true;  

  59.             }  

  60.         }  

  61.     }  

  62.      

  63. }