天天看點

【Unity3d】【項目學習心得】從資源伺服器下載下傳資源(一)

項目裡面的許多資源都是從資源伺服器加載的,這樣子可以減小用戶端的包大小。

是以我們需要一個專門的類來管理下載下傳資源。

資源分很多類型,如:json表,txt檔案,image檔案,二進制檔案,UIAtlas圖集,AssetBundle等。

是以,首先建立一個管理資源檔案類型的類LoadFileType。 其中檔案類型可以用枚舉來表示,也可以用類成員常量來表示。

此處使用類成員常量:

[csharp]  view plain copy

【Unity3d】【項目學習心得】從資源伺服器下載下傳資源(一)
【Unity3d】【項目學習心得】從資源伺服器下載下傳資源(一)
  1. using UnityEngine;  
  2. using System.Collections;  
  3. namespace AssemblyCSharp {  
  4.     public class LoadFileType {  
  5.         public const string IMAGE = "image";  
  6.         // unity3d檔案格式  
  7.         public const string UNITY3D = "unity3d";  
  8.         // 子產品資源打包格式  
  9.         public const string MODULE_RESOURCE = "moduleResource";  
  10.         public const string BINARY = "binary";  
  11.         public const string TXT = "txt";  
  12.         public const string JSON = "json";  
  13.         // fbx打包的assetBundle格式檔案  
  14.         public const string FBX = "fbx";  
  15.         public const string AUDIO = "audio";  
  16.         // 字型檔案  
  17.         public const string FONT = "font";  
  18.         // 二進制檔案(用于背景更新)  
  19.         public const string BINARY_BG = "binary_bg";  
  20.     }  
  21. }  

接下來需要建立一個類,用來管理單個下載下傳任務,unity3d下載下傳都是使用WWW來下載下傳,我們要建立的類需要具有以下功能:

① 使用WWW下載下傳資源。

② 具備委托回調接口,友善調用這個類的對象能夠接收到回報,初步回調需要:下載下傳完成後的回調,出現錯誤的回調,下載下傳程序的回調。

③ 逾時設定,超過一定時間則被認定下載下傳任務失敗。

④ 除此之外,還需記錄本次下載下傳任務的URL、以及所下載下傳資源的fileType。

根據以上條件,這個類大緻為:

// LoadReques.cs

[csharp]  view plain copy

【Unity3d】【項目學習心得】從資源伺服器下載下傳資源(一)
【Unity3d】【項目學習心得】從資源伺服器下載下傳資源(一)
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System.Collections.Generic;  
  4. namespace AssemblyCSharp {  
  5.     public class LoadRequest {  
  6.         public delegate void DownCompleteDelegate(LoadParam param);  
  7.         public delegate void ErrorDelegate(LoadRequest request);  
  8.         public delegate void ProcessDelegate(float processValue, int fileTotalSize = 0);  
  9.         public DownCompleteDelegate completeFunction;  
  10.         public ErrorDelegate errorFunction;  
  11.         public ProcessDelegate processFunction;  
  12.         public const int TIME_OUT_FRAMES = 300;  
  13.         private int _loadTotalFrames = 0; // 加載的總幀數  
  14.         public bool isTimeOut = false;  
  15.         public bool alreadyDeal = false;  
  16.         public string requestURL;  
  17.         public string fileType;  
  18.         public WWW wwwObject = null;  
  19.         public List<object> customParams = new List<object>();  
  20.         public int priotiry = LoadPriority.NORMAL;  
  21.         public LoadRequest(string url,  object customParam = null, string type = "", DownCompleteDelegate completeFunc = null, ErrorDelegate errorFunc = null, ProcessDelegate processFunc = null) {  
  22.             requestURL = url;  
  23.             fileType = type;  
  24.             completeFunction = completeFunc;  
  25.             if (completeFunc != null)  
  26.                 customParams.Add(customParam);  
  27.             if (errorFunc != null)   
  28.                 errorFunction = errorFunc;  
  29.             if (processFunc != null)   
  30.                 processFunction = processFunc;  
  31.             wwwObject = new WWW(requestURL);  
  32.             wwwObject.threadPriority = ThreadPriority.Normal;  
  33.         }  
  34.         public int loadTotalFrames {  
  35.             get {  
  36.                 return _loadTotalFrames;  
  37.             }  
  38.             set {  
  39.                 _loadTotalFrames = value;  
  40.                 if (_loadTotalFrames > LoadRequest.TIME_OUT_FRAMES)  
  41.                     isTimeOut = true;  
  42.             }  
  43.         }  
  44.     }  
  45. }  
U3D