c#怎么开发和设计游戏模块

首先是UnityWebRequest的构建与数据发送:

UnityWebRequest webRequest = new UnityWebRequest(url, "POST"); // 初始化使用POST的UnityWebRequest,并附上目标地址

webRequest.SetRequestHeader("", ""); // 设置HTTP的头信息

// 初始化UnityWebRequest的downloadHandler与uploadHandler
webRequest.downloadHandler = (DownloadHandler) new DownloadHandlerBuffer();
webRequest.uploadHandler = (UploadHandler) new UploadHandlerRaw(data);
webRequest.uploadHandler.contentType = "application/x-www-form-urlencoded";

var asyncOperation = webRequest.SendWebRequest(); // 数据发送

玩游网调用了UnityWebRequest.SendWebRequest之后,会得到一个UnityWebRequestAsyncOperation类型的实例。作为继承自AsyncOperation的类,UnityWebRequestAsyncOperation除了能表示请求的进度以及是否结束外,还附带有创建了本次请求的UnityWebRequest的实例的引用。后续数据的接收方案都基于此。

短链接的接收方案1——completed回调

当调用了UnityWebRequest.SendWebRequest之后,可以对得到的UnityWebRequestAsyncOperation类型实例内的completed事件添加行为,以期在收到服务器返回消息后能够立即处理接收到的数据。

asyncOperation.completed += (a) =>
{
    // 将事件传入的 AsyncOperation 转换为 UnityWebRequestAsyncOperation,
    // 并从webRequest的downloadHandler中获取下载的数据
    Do(((UnityWebRequestAsyncOperation)a).webRequest.downloadHandler.data);
};

 

短链接的接收方案2——Update

当调用UnityWebRequest.SendWebRequest获取到UnityWebRequestAsyncOperation类型的实例后,可以将该实例加入一个队列。依托网络模块的心跳(Update方法,这里的网络模块指你自己实现的网络架构,如何让它的Update执行起来由你说了算),在每次心跳时检测队列内的请求是否完成,并对完成的请求执行后续操作。

// 存放 UnityWebRequestAsyncOperation 的列表
private List<UnityWebRequestAsyncOperation> _asyncOperations = new List<UnityWebRequestAsyncOperation>();

public void Update()
{
    for (int i = 0; i < _asyncOperations.Count; i++)
    {
        var asyncOperation = _asyncOperations[i];
        if (!asyncOperation.isDone)
        {
            // 请求未完成,则略过后续处理逻辑
            continue;
        }

        // 从webRequest的downloadHandler中获取下载的数据并处理
        Do(asyncOperation.webRequest.downloadHandler.data);
        asyncOperation.Dispose();
        // 移除已处理完的请求
        _asyncOperations.RemoveAt(i--);
    }
}

需要说明的是,处理完下载数据后一定要对asyncOperation执行Dispose操作,否则Unity很可能会有Native数据泄露的报错。初步判定这是Unity对UnityWebRequest管理导致的报错。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值