• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

Unity3D封装WWW

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1010/58.html

WWW类主要用于从网上下载资源,或从本地引用资源,本篇文章我们就来看看如何封装WWW类,
 
直接上代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WWWTest {
    /// <summary>
    /// 下载路径
    /// </summary>
    private string url;
    public string URL
    {
        set
        {
            url = value;
        }
        get
        {
            return url; 
        }
    }
    /// <summary>
    /// 开始下载
    /// </summary>
    public virtual void BeginDownLoad()
    {
    }
    /// <summary>
    /// 下载结束
    /// </summary>
    public virtual void FinishDownLoad(WWW tepWWW)
    {
    }
    /// <summary>
    /// 下载出错
    /// </summary>
    public virtual void ErrorDownLoad()
    {
    }
    /// <summary>
    /// 下载协程
    /// </summary>
    /// <returns></returns>
    public IEnumerator DownLoad()
    {
        BeginDownLoad();
        WWW www = new WWW(URL);
        yield return www;
        if (string.IsNullOrEmpty(www.error))
        {
            //下载成功
            FinishDownLoad(www);
        }
        else
        {
            //下载失败
            ErrorDownLoad();
        }
    }
 
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WWWDownLoad : WWWTest {
    /// <summary>
    /// 构造方法
    /// </summary>
    /// <param name="url"></param>
    public WWWDownLoad(string url)
    {
        Init(url);
    }
    /// <summary>
    /// 丰富URL
    /// </summary>
    /// <param name="url"></param>
    public void Init(string url)
    {
        if (Application.platform == RuntimePlatform.Android)
        {
            this.URL = "jar:file://" + url;
        }
        else if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
        {
            this.URL = "file:///" + url;
        }
        else
        {
            this.URL = "file://" + url;
        }
    }
    public override void FinishDownLoad(WWW tepWWW)
    {
        Debug.Log(tepWWW.text);
    }
 
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DownLoading : MonoBehaviour {
    public static DownLoading Instance;
    /// <summary>
    /// 下载队列
    /// </summary>
    Queue<WWWTest> DownLoadQueue;
    /// <summary>
    /// 是否下载完成
    /// </summary>
    private bool IsFinish;
    private void Awake()
    {
        Instance = this;
    }
    void Start () {
        DownLoadQueue = new Queue<WWWTest>();
        IsFinish = true;   
    }
    /// <summary>
    /// 添加下载任务到下载队列中
    /// </summary>
    public void AddDownLoad(WWWTest test)
    {
        DownLoadQueue.Enqueue(test);
        //如果下载完成 开启下载协程
        if (IsFinish)
        {
            IsFinish = false;
            StartCoroutine(DownLoad());
        }
    }
    public IEnumerator DownLoad()
    {
        while(DownLoadQueue.Count > 0)
        {
            WWWTest test = DownLoadQueue.Dequeue();
            yield return test.DownLoad();
        }
        IsFinish = true;
    }
    void Update () {
        //调用
        if (Input.GetKeyDown(KeyCode.A))
        {
            string url = Application.dataPath + "/WWW/WWWTest.cs";
            WWWDownLoad download1 = new WWWDownLoad(url);
            AddDownLoad(download1);
            Debug.Log(123);
        }
    }


上篇:上一篇:Unity3D粒子系统被2D的NGUI或者UGUI遮挡的问题
下篇:下一篇:Untiy3D使用PlayerPrefs类实现本地数据加密