您的位置:首页 > 移动开发 > Unity3D

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

2016-04-01 16:39 405 查看
http://blog.csdn.net/damenhanter/article/details/50273279
项目里面的许多资源都是从资源服务器加载的,这样子可以减小客户端的包大小。所以我们需要一个专门的类来管理下载资源。资源分很多类型,如:json表,txt文件,image文件,二进制文件,UIAtlas图集,AssetBundle等。
所以,首先创建一个管理资源文件类型的类LoadFileType。 其中文件类型可以用枚举来表示,也可以用类成员常量来表示。此处使用类成员常量:
[csharp] view plaincopy




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
[csharp] view plaincopy




/**

* 下载任务

* 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;

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息