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

项目里面的很多资源都是从资源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<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;
            }
        }
    }

}
时间: 2024-10-23 05:55:47

【Unity3d】【项目学习心得】从资源server下载资源(一)的相关文章

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

项目里面的许多资源都是从资源服务器加载的,这样子可以减小客户端的包大小. 所以我们需要一个专门的类来管理下载资源. 资源分很多类型,如:json表,txt文件,image文件,二进制文件,UIAtlas图集,AssetBundle等. 所以,首先创建一个管理资源文件类型的类LoadFileType. 其中文件类型可以用枚举来表示,也可以用类成员常量来表示. 此处使用类成员常量: using UnityEngine; using System.Collections; namespace Asse

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

继上篇的基础准备 从资源服务器下载资源(一) 我们现在继续进一步完成 LoadManager 管理类. 管理类因为在全局中都是存在的,所以应该作为单例存在. 因为LoadManager 类是管理多个 LoadRequest的,所以我们需要存储当前正在下载的LoadRequest,以及下载完成的 LoadRequest. 另外,我们为了防止太多下载线程占用过多资源,我们对于下载的线程个数做一定的限制,如项目里面的最大线程数为2,所以我们需要一个存储LoadRequest的等待队列. 根据以上分析,

Jetsever开源项目学习(三)Server学习

首先看一下org.menacheri.jetserver.server包 Server.java package org.menacheri.jetserver.server; import java.net.InetSocketAddress; import org.menacheri.jetserver.app.Session; public interface Server { public interface TransmissionProtocol{ } //内部接口,只有域没有方法

webpack vuejs项目学习心得

最近在做移动端的项目,最近webpack和vuejs很火,就想到了用vuejs webpack来构建我的项目 先了解了一些webpack的入门基础 http://webpack.github.io/docs/  webpack官方文档 https://zhuanlan.zhihu.com/p/20367175 webpack傻瓜式入门一 https://zhuanlan.zhihu.com/p/20397902  傻瓜式入门(二) 看完入门教程,懂得了webpack的一些基本配置和插件的使用.

Unity3d 从资源服务器下载资源(一)

项目里面的许多资源都是从资源服务器加载的,这样子可以减小客户端的包大小. 所以我们需要一个专门的类来管理下载资源. 资源分很多类型,如:json表,txt文件,image文件,二进制文件,UIAtlas图集,AssetBundle等. 所以,首先创建一个管理资源文件类型的类LoadFileType. 其中文件类型可以用枚举来表示,也可以用类成员常量来表示. 此处使用类成员常量: 1 using UnityEngine; 2 using System.Collections; 3 4 5 name

java学习项目案例分享视频资源地址

java学习项目案例分享视频资源地址 http://v.youku.com/v_show/id_XMjYxNjc4MTgwOA==.html?spm=a2hzp.8244740.userfeed.5!8~5~5~5!3~5~A你要的学习资料到了- web前端交流学习群21

windows类书的学习心得(转载)

原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千,很多陌生的出版社,很多陌生的作者,很多陌生的译者,书名也是越来越夸张,什么××天精通××,精通××编程, ××宝典等等,书的印刷质量真的很好,纸张的质量也是今非昔比啊,但书的内容好象却是越来越让人失望,也许是我老了,我的思想我的观念已脱离现实社会,也许是外面的世界变化得太快,我编程数月,出去一走,

U3D学习心得-----资源管理:模型和角色动画的输出设置(上)

模型主要可以以两种方式进行输出: (1)使用插件进行输出.并输出为指定的文件格式,如FBX或OBJ (2)直接输出为响应的3D应用文件,如.max或者Blen,Unity自身再进行转换. 使用3D软件包自身格式进行输出的优缺点: 优点:(1)快速的输出工程,直接从3D文件到Unity (2)简单的初始化过程 缺点:(1)文件中可能会包括不需要的数据. (2)若输出文件过大,可能会妨碍Unity的更新工程.比较少的数据检验过程,可能会增加出错的几率. 而使用插件进行输出的优缺点: 优点:(1)仅仅

sina微博开发学习心得

大家都知道新浪微博上有很多附加应用,那些东西是怎么做出来的呢,这几天开始学习sina微博的开发,sina为我们提供了很多接口,根据这些接口就可以开发基于微博的一些应用! 首先一些需要用到的技术要点 一.新浪微博部分: 1.新浪微博 Aouth 认证 2.新浪微博 获取微博列表 3.新浪微博 发表微博 4.新浪微博 评论微博 5.新浪微博 转发微博 二.其他技术要点: 1.Android Layout 布局 2.Android自定义 UI 3.Android Handler 3.Android S