封装WWW类

第一个脚本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);
        }
    }
}
 

猜你喜欢

转载自blog.csdn.net/Edision_li/article/details/84940971
www