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

项目里面的许多资源都是从资源服务器加载的,这样子可以减小客户端的包大小。

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

资源分很多类型,如: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-11-03 14:44:06

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

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

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

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

项目里面的很多资源都是从资源server载入的,这样子能够减小client的包大小. 所以我们须要一个专门的类来管理下载资源. 资源分非常多类型,如:json表,txt文件,image文件,二进制文件,UIAtlas图集,AssetBundle等. 所以,首先创建一个管理资源文件类型的类LoadFileType. 当中文件类型能够用枚举来表示,也能够用类成员常量来表示. 此处使用类成员常量: using UnityEngine; using System.Collections; namespa

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

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

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的一些基本配置和插件的使用.

Jquery的DataTable插件 AJAX 服务器分页的的学习心得(java版)

首先得先引入对应的js 1.jquery.min.js  首先导入 2. File:        jquery.dataTables.min.js Version:     1.9.4     这是我使用的版本 这是  jsp 页面 关键的table  代码 <table id="fuck" class="table table-bordered data-table"> <thead> <tr> <span style=

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

【学习Koa】原生koa2 静态资源服务器例子

实现思路 首先读取当前路径下所有的文件和文件夹 当去点击某个列表项时判断其实文件还是文件夹,文件的话直接读取,文件夹则再次利用上一个步骤读取并展示 文件结构 代码 index.js 入口文件 const Koa = require('koa') const path = require('path') const getContent = require('./util/content') const mimes = require('./util/mimes') const app = new

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

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

干货教程 | APICloud新手学习心得分享

最近很多爱学习的开发者,在后台给柚子君留言询问:如何在APICloud平台创建app?如何添加模块?自定义loader编译好之后在studio里面怎么同步等问题. 柚子君就借此机会给大家分享一个对 js 及前端了解较浅的新手开发者的学习心得(不要小瞧新手哦,分享的干货绝对有惊喜),主要说明一个登录页的实例及调试中遇到的问题.分享者负责的项目架构大致为ApiCloud+Asp.Net MVC,分享如下: 一.首次创建一个demo 先自己按照官网教程,登录https://www.apicloud.c