原创

ToLua 协程中调用 WWW

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://linsh-tech.blog.csdn.net/article/details/77600479

引言:

在游戏中假如需要下载网络资源,一般都是借助 Unity.WWW 工具类来完成,接下来我们分别说一下 C# 和 tolua 下实现的过程。

C# 下的实现

在 C# 中的做法通常如下:

  • 启动一个协程来执行下载任务,创建一个 WWW 对象;
  • 在一个死循环中查询下载任务是否完成;
  • 下载完成则跳出循环体,从上面创建的 WWW 对象的 bytes 属性中取出下载到的数据。
using UnityEngine;
using System.Collections;

public class TestWWW : MonoBehaviour {

	// Use this for initialization
	void Start () {
        string url = "http://news.hainan.net/Editor/img/201702/20170213/big/20170213072342206_6778430.jpg";
        //启动一个协程执行下载任务
        StartCoroutine(Download(url));
    }

    IEnumerator Download(string url)
    {
        WWW www = new WWW(url);
        //在循环中查询是否下载完毕
        while (www != null)
        {
            if(www.isDone)
            {
                //下载结束退出死循环
                break;
            }
            yield return null;
        }
        //统计下载数据大小
        var data = www.bytes;
        int strDataLengthKB = (int)data.Length / 1000;
        Debug.Log("下载资源大小:"+strDataLengthKB+" KB");
    }

    // Update is called once per frame
    void Update () {
	
	}
}

这里我已下载一张图片为例子,执行结果在如下:

下载资源大小:67 KB
UnityEngine.Debug:Log(Object)

toLua 下的实现

lua 中原生的协程容易出各种奇奇怪怪的问题,tolua 中做了优化,使用起来方便得多,同样的功能在 tolua 中的写法:

coroutine.start(function()
    print('协程开始')
    local www = WWW('http://news.hainan.net/Editor/img/201702/20170213/big/20170213072342206_6778430.jpg')
    --等待 www 下载完毕后继续执行
    coroutine.www(www)
    --下载到的数据
    local data = www.bytes
    local size = math.floor(data.Length/1000)
    print('协程结束,数据大小:'..size..' Kb')
end)

执行结果:

协程开始
UnityEngine.Debug:Log(Object)
协程结束,数据大小:67 Kb
UnityEngine.Debug:Log(Object)

错误判别:

我还遇到一个问题就是要下载的地址不存在,但是 WWW.bytes 依然回返回 168b 的数据,那么我们要如何来判断是否正常下载到我们想要数据?那就需要使用 WWW 自带的错误信息 WWW.error 属性了:

--错误信息
local errorInfo = www.error
if errorInfo~= nil and string.len(errorInfo) > 0 then
    local i,j = string.find(errorInfo,'404')
    if j ~= nil then
    	--下载资源不存在
    end
end

参考资料:

文章最后发布于: 2017-08-26 12:24:27
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览