博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Unity3d】【项目学习心得】从资源server下载资源(一)
阅读量:6269 次
发布时间:2019-06-22

本文共 3013 字,大约阅读时间需要 10 分钟。

项目里面的很多资源都是从资源server载入的,这样子能够减小client的包大小。

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

资源分非常多类型,如: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 customParams = new List();        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;            }        }    }   }

转载地址:http://rzppa.baihongyu.com/

你可能感兴趣的文章
浅谈大型web系统架构
查看>>
淘宝大秒系统设计详解
查看>>
linux如何修改登录用户密码
查看>>
Kali Linux 2017中Scapy运行bug解决
查看>>
Python监控进程性能数据并画图保存为PDF文档
查看>>
Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
查看>>
Mac OS 10.10.3下Apache + mod_wsgi配置【一】
查看>>
Hibernate基于注解的双向one-to-many映射关系的实现
查看>>
算法竞赛入门经典 例题 3-2 蛇形填数
查看>>
remove-duplicates-from-sorted-list I&II——去除链表中重复项
查看>>
c++ 网络库
查看>>
Linux 格式化扩展分区(Extended)
查看>>
linux echo命令
查看>>
nginx 内置变量大全(转)
查看>>
lakala反欺诈建模实际应用代码GBDT监督学习
查看>>
java 解析excel工具类
查看>>
Google FireBase - fcm 推送 (Cloud Messaging)
查看>>
BBS论坛(二十七)
查看>>
html DOM 的继承关系
查看>>
装饰器的邪门歪道
查看>>