【Unity3d】【项目学习心得】从资源服务器下载资源(一)

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

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

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


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

此处使用类成员常量:

[csharp]  view plain copy
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4.   
  5. namespace AssemblyCSharp {  
  6.     public class LoadFileType {  
  7.           
  8.         public const string IMAGE = "image";  
  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 plain copy
  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. }  

你可能感兴趣的:(U3D)