• 【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;
                }
            }
        }
       
    }
    








  • 相关阅读:
    Springboot+resteasy定时任务
    MySql COUNT(),SUM()组合用法
    MySql按每日、每周、每月分组统计数据
    阿里云通过访问地址来缩小图片,减少流量消耗
    ExtJs6获取form里的数据
    postfix中recipient/client/sender/helo四者的区别<转载>
    用telnet命令,POP3接收邮件
    用telnet命令,SMTP发送邮件
    Linux 标准目录结构
    centos minimal Bind 主从服务器部署
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4183851.html
Copyright © 2020-2023  润新知