第一个脚本WWW中心
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WWWHelper : MonoBehaviour
{
public static WWWHelper Instance;
private void Awake()
{
Instance = this;
}
Queue<WWWItem> downQueue = new Queue<WWWItem>();
bool isDownLoadFinished = true;
/// <summary>
/// 加入下载任务
/// </summary>
/// <param name="item"></param>
public void AddTask(WWWItem item)
{
downQueue.Enqueue(item);
if (downQueue.Count == 1 && isDownLoadFinished)
{
isDownLoadFinished = false;
StartCoroutine(DownLoad());
}
}
/// <summary>
/// 下载后取消任务
/// </summary>
/// <returns></returns>
public IEnumerator DownLoad()
{
while (downQueue.Count > 0)
{
WWWItem item = downQueue.Dequeue();
yield return item.DownLoad();
}
isDownLoadFinished = true;
}
}
第二个脚本抽象下载Item
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WWWItem {
/// <summary>
/// 开始下载
/// </summary>
public virtual void BeginDownLoad()
{
}
/// <summary>
/// 下载完成
/// </summary>
/// <param name="www"></param>
public virtual void DownLoadFinish(WWW www)
{
}
/// <summary>
/// 下载出错
/// </summary>
/// <param name="tempItem"></param>
public virtual void DownLoadError(WWWItem tempItem)
{
}
private string url;
public string URL
{
get { return url; }
set { url = value; }
}
public IEnumerator DownLoad()
{
BeginDownLoad();
WWW www = new WWW(URL);
yield return www;
if (string.IsNullOrEmpty(www.error))
{
DownLoadFinish(www);
}
else
{
DownLoadError(this);
}
}
}
第三个脚本构造下载元素
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WWWTxt : WWWItem {
/// <summary>
/// 构造方法
/// </summary>
/// <param name="path">传递相对路径</param>
public WWWTxt(string path)
{
path = Application.dataPath+path;
InitPath(path);
}
public override void DownLoadError(WWWItem tempItem)
{
WWWHelper.Instance.AddTask(tempItem);
}
public override void DownLoadFinish(WWW www)
{
Debug.Log("Process Txt==" + www.text);
}
/// <summary>
/// 初始化路径
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public void InitPath(string url)
{
if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
{
this.URL = "file:///" + url;
}
else if (Application.platform == RuntimePlatform.Android)
{
this.URL = "jar:file://" + url;
}
else
{
this.URL = "file://" + url;
}
}
}
第四个脚本使用www
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UseWWW : MonoBehaviour {
void Update () {
if (Input.GetKeyDown(KeyCode.A))
{
WWWTxt tempItem = new WWWTxt("/test.xml");
WWWHelper.Instance.AddTask(tempItem);
}
}
}