首页 > 编程语言 >c#怎么开发和设计游戏模块

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

时间:2023-07-22 09:12:13浏览次数:47  
标签:asyncOperation 游戏 c# downloadHandler asyncOperations webRequest 模块 UnityWebReque

首先是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管理导致的报错。

 

 

 

标签:asyncOperation,游戏,c#,downloadHandler,asyncOperations,webRequest,模块,UnityWebReque
From: https://www.cnblogs.com/yeci/p/17572834.html

相关文章

  • c#控制台上开发的2D闯关小游戏
    ​初学者可以看看 学习一下编程思想还有游戏思想.好了话不多说上代码大家自己看哈. usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Threading;namespaceDevilDungeonCV{  ......
  • 【雕爷学编程】Arduino动手做(52)---MicroSD卡读写模块4
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • ERROR 1709 (HY000): Index column size too large. The maximum column size is 767
    MySQL版本5.6.35在一个长度为512字符的字段上创建uniquekey报错CREATEDATABASEdpcs_metadataDEFAULTCHARACTERSETutf8;select*frominformation_schema.SCHEMATA;+--------------+--------------------+----------------------------+------------------------+---......
  • 使用 Dockerfile 构建生产环境镜像
    传统部署的坑:1202年了,如果你连Docker都不知道是什么,我建议买一本书看看——或者谷歌一下,博客已经写烂了。为什么有这篇文章,是因为我在真正做容器化改造的时候,发现公司生产环境存在大量的坑:传统虚拟机部署,基本依赖克隆或者手工编译。由于人力原因,SRE历来单传,编译出来的PHP......
  • m基于扩频解扩+LDPC编译码的通信链路matlab误码率仿真,调制对比QPSK,16QAM,64QAM,扩频
    1.算法仿真效果matlab2022a仿真结果如下:     2.算法涉及理论知识概要      在现代通信系统中,扩频技术被广泛应用于数字通信链路中。扩频技术通过将要传输的信息序列与一个宽带的伪随机码序列进行卷积,将原始信号转换成一个具有更大带宽的扩频信号。在接收端......
  • 字典dict转字符串
    在Python中,可以使用不同的方法将字典转换为字符串。以下是几种常用的方法:使用str()函数:emy_dict={'key1':'value1','key2':'value2','key3':'value3'}dict_str=str(my_dict)print(dict_str)#输出:{'key1':'value......
  • mac配置初体验
    安装JDK进入azul下载对应版本、安装https://www.azul.com/downloads/查看安装路径/usr/libexec/java_home-V###输出以下内容MatchingJavaVirtualMachines(2):16.0.2(arm64)"AzulSystems,Inc."-"Zulu16.32.15"/Users/xiaoming/Library/Java/JavaVirt......
  • Zbox loves stack
    Zboxlovesstack题意有\(n\)个栈,\(q\)次操作,\(3\)种操作。1.\([l,r]\)之间的栈全部加入一个数\(k\)。2.\([l,r]\)之间的栈全部弹出栈顶。3.第\(s\)个栈中的第\(k\)个元素,栈顶为第一个元素,没有则输出Error。\(n\leq10^6,q\leq10^5\)题解考试的时候想到了......
  • m基于Costas环的QPSK载波同步matlab性能仿真,对比不同环路系数等对载波同步的影响
    1.算法仿真效果matlab2022a仿真结果如下:       2.算法涉及理论知识概要        在数字通信中,载波同步是保证正常数据传输的重要环节之一。Costas环是一种常用的基于相位差检测的载波同步方法,适用于QPSK调制信号的同步。本文将介绍基于Costas环的QPSK......
  • 欧姆龙CX系列PLC串口转以太网欧姆龙cp1hplc以太网连接电脑
    你是否还在为工厂设备信息采集困难而烦恼?捷米特JM-ETH-CX转以太网通讯处理器为你解决这个问题!捷米特JM-ETH-CX转以太网通讯处理器专门为满足工厂设备信息化需求而设计,可以用于欧姆龙多个系列PLC的太网数据采集,非常方便构建生产管理系统。而且,该处理器采用模块化设计,不占用PLC编程......