打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【Unity3d】【项目学习心得】从资源服务器下载资源(一)
项目里面的许多资源都是从资源服务器加载的,这样子可以减小客户端的包大小。
所以我们需要一个专门的类来管理下载资源。
资源分很多类型,如: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;
}
}
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# WebApi使用AttributeRoutes特性路由
在unity中使用Newtonsoft.Json
AssetBundle系列资源的加载、简易的资源管理器
Unity -Demo 之 ✨ 语音识别-讯飞SDK使用过程
U8SDK
C# HttpClient发送请求获取接口数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服