项目里面的许多资源都是从资源服务器加载的,这样子可以减小客户端的包大小。
所以我们需要一个专门的类来管理下载资源。
资源分很多类型,如:json表,txt文件,image文件,二进制文件,UIAtlas图集,AssetBundle等。
所以,首先创建一个管理资源文件类型的类LoadFileType。 其中文件类型可以用枚举来表示,也可以用类成员常量来表示。
此处使用类成员常量:
- using UnityEngine;
- using System.Collections;
- namespace AssemblyCSharp {
- public class LoadFileType {
- public const string IMAGE = "image";
- // unity3d文件格式
- public const string UNITY3D = "unity3d";
- // 模块资源打包格式
- public const string MODULE_RESOURCE = "moduleResource";
- public const string BINARY = "binary";
- public const string TXT = "txt";
- public const string JSON = "json";
- // fbx打包的assetBundle格式文件
- public const string FBX = "fbx";
- public const string AUDIO = "audio";
- // 字体文件
- public const string FONT = "font";
- // 二进制文件(用于后台更新)
- public const string BINARY_BG = "binary_bg";
- }
- }
接下来需要创建一个类,用来管理单个下载任务,Unity3D下载都是使用WWW来下载,我们要创建的类需要具有以下功能:
① 使用WWW下载资源。
② 具备委托回调接口,方便调用这个类的对象能够接收到反馈,初步回调需要:下载完成后的回调,出现错误的回调,下载进程的回调。
③ 超时设置,超过一定时间则被认定下载任务失败。
④ 除此之外,还需记录本次下载任务的URL、以及所下载资源的fileType。
根据以上条件,这个类大致为:
// LoadReques.cs
- /**
- * 下载任务
- * create by chensh 2014.10.27 10:31
- */
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- namespace AssemblyCSharp {
- public class LoadRequest {
- public delegate void DownCompleteDelegate(LoadParam param);
- public delegate void ErrorDelegate(LoadRequest request);
- public delegate void ProcessDelegate(float processValue, int fileTotalSize = 0);
- public DownCompleteDelegate completeFunction;
- public ErrorDelegate errorFunction;
- public ProcessDelegate processFunction;
- public const int TIME_OUT_FRAMES = 300;
- private int _loadTotalFrames = 0; // 加载的总帧数
- public bool isTimeOut = false;
- public bool alreadyDeal = false;
- public string requestURL;
- public string fileType;
- public WWW wwwObject = null;
- public List<object> customParams = new List<object>();
- public int priotiry = LoadPriority.NORMAL;
- public LoadRequest(string url, object customParam = null, string type = "", DownCompleteDelegate completeFunc = null, ErrorDelegate errorFunc = null, ProcessDelegate processFunc = null) {
- requestURL = url;
- fileType = type;
- completeFunction = completeFunc;
- if (completeFunc != null)
- customParams.Add(customParam);
- if (errorFunc != null)
- errorFunction = errorFunc;
- if (processFunc != null)
- processFunction = processFunc;
- wwwObject = new WWW(requestURL);
- wwwObject.threadPriority = ThreadPriority.Normal;
- }
- public int loadTotalFrames {
- get {
- return _loadTotalFrames;
- }
- set {
- _loadTotalFrames = value;
- if (_loadTotalFrames > LoadRequest.TIME_OUT_FRAMES)
- isTimeOut = true;
- }
- }
- }
- }