unity学习(44)——选择角色菜单——顺利收到服务器的数据

本节的思路参考自,内容并不相同:13ARPG网络游戏编程实践(十三):角色选择UI及创建面板制作(四)_哔哩哔哩_bilibili

 现在的代码写在MessageManager.cs中,函数名UserHandler(是从OnMessage跳过来的):

点击确定注册按钮后,客户端收到了如下数据包:

这里问题其实挺多的,账号信息要写到文件里(出字典的时候) 。。。一点点来吧,顺利的化,和注册部分的难度是持平的。

1.客户端确实收到了数据包!

2.但并没有把数据包加到List中。原因是因为长度有问题,大概率还是大小端导致的!

而且unity中Debug.Log("怎么都让我赶上了1");如果是纯字符串,有的时候是不会输出的

3.先去服务器查看一下包的组成是否有问题:服务器的UserHandler中如下代码已正常执行:

private void create(Session session, SocketModel model)
{Console.WriteLine("UserHandler.create!!!!!!!!!");string accId = OnLineUtil.getAccId(session);Console.WriteLine(accId);CreateDTO createDto = Coding<CreateDTO>.decode(model.Message);Console.WriteLine(model.Message);session.write(2, 0, 3, (object) BizUtil.user.create(accId, createDto.name, createDto.job));//本意是给对应键的部分增加2个值,而现在却查不到键
}

4.session.write的作用就是向客户端发送数据包,最后发现是这里的num1为空出了问题。

  public void write(int type, int area, int command, object message){SocketModel socketModel = new SocketModel(type, area, command, (string) null);if (message != null)socketModel.Message = Coding<object>.encode(message);int num1 = 16;if (socketModel.Message != null)num1 += socketModel.Message.Length;ByteArray byteArray = new ByteArray();Console.WriteLine("num1:", num1);//都不是事byteArray.WriteInt(num1);byteArray.WriteInt(socketModel.Type);byteArray.WriteInt(socketModel.Area);byteArray.WriteInt(socketModel.Command);if (socketModel.Message != null){int num2 = num1 + socketModel.Message.Length;byteArray.WriteInt(socketModel.Message.Length);byteArray.WriteUTFBytes(socketModel.Message);}elsebyteArray.WriteInt(0);this.socket.Send(byteArray.Buffer);Console.WriteLine("session.write返回给客户端的消息长度" + (object)byteArray.Buffer.Length);foreach (byte b in byteArray.Buffer){Console.Write(b.ToString("x2"));//是不是还有个大小端的问题}Console.WriteLine(byteArray.Buffer.ToString());//MyLog.form.textAdd("消息长度" + (object) byteArray.Buffer.Length);}
}

5.重启服务器一下却没问题了,客户端得到了预期的结果

6.至于num1是空的原因,是因为Console.WriteLine中用“+”来输出多出,而不是“,”

7.239长度的数据包是userHandler中如下代码部分生成的:

private void create(Session session, SocketModel model)
{Console.WriteLine("UserHandler.create!!!!!!!!!");string accId = OnLineUtil.getAccId(session);Console.WriteLine(accId);CreateDTO createDto = Coding<CreateDTO>.decode(model.Message);Console.WriteLine(model.Message);session.write(2, 0, 3, (object) BizUtil.user.create(accId, createDto.name, createDto.job));//本意是给对应键的部分增加2个值,而现在却查不到键
}

里面包含了: 游戏角色的必要信息

{"id":"af2492c3-621b-4af8-96cb-1e599c9d4db2","name":"ddd556\u200B","job":1,"level":1,"exp":0,"atk":10,"def":5,"hp":50,"maxHp":50,"point":{"X":-2.21,"Y":13.83,"Z":7.5},"rotation":{"X":0.0,"Y":0.0,"Z":0.0,"W":0.0},"map":2}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/715818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Revit-二开之创建墙-(6)

Revit API窗间墙 protected override Result OnExecute(ExternalCommandData commandData, ref string message, ElementSet elements) {try{// 获取当前活动的文档

你是否知道Python的列表翻转、排序和多维列表

1.reverse() 表示翻转列表中的元素&#xff0c;不会生成新列表 list1 [2343, 55, 4, 345, 676, 768] list1.reverse() print(list1) # [768, 676, 345, 4, 55, 2343] 2.sort() 对原列表元素进行排序&#xff0c;默认是升序 list1 [2343, 55, 4, 345, 676, 768] list1…

腾讯云幻兽帕鲁服务器在Linux和Windows操作系统上的安全性对比如何?哪个更加安全?

腾讯云幻兽帕鲁服务器在Linux和Windows操作系统上的安全性对比如何&#xff1f; Linux因其资源利用率高、稳定性和安全性较强而受到许多专业用户的青睐。这表明在Linux操作系统上&#xff0c;腾讯云可能会更倾向于提供高安全性的服务环境。然而&#xff0c;并没有直接比较Linu…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜视行人检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发高效的夜视行人检测系统对于提升夜间安全和监控效能至关重要。本篇博客详尽介绍了如何利用深度学习技术搭建一个夜视行人检测系统&#xff0c;并提供了完整的实现代码。本系统采用了先进的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5进行了性能比较…

嵌入式Linux中GPIO设置的一些基本指令和步骤

一、GPIO的介绍 嵌入式Linux中的GPIO&#xff08;General Purpose Input/Output&#xff0c;通用输入/输出&#xff09;是一种常用的接口&#xff0c;允许开发者直接控制硬件设备的某些引脚&#xff0c;进行诸如LED控制、传感器读取、设备状态监测等任务。 二、设置步骤和示例…

第四十四天| 卡尔网 52. 携带研究材料、518. 零钱兑换 II、377. 组合总和 Ⅳ

01背包问题卡尔网 52. 携带研究材料 题目链接&#xff1a;52 携带研究材料 题干&#xff1a;小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括…

centos7安装夜莺

一、前期准备 1.1.关闭防火墙&#xff0c;SELINUX systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config查看状态 systemctl status firewalld systemctl sta…

Vue开发实例(三)项目引入Element-UI

项目引入Element-UI 一、引入Element-UI二、注册组件1、vue2使用element-ui2、vue3使用element-ui 三、使用Element组件1、轻微改造2、验证element是否生效 一、引入Element-UI npm i element-ui --save npm install element-ui -S等待安装完成 二、注册组件 1、vue2使用ele…

【Leetcode每日一题】前缀和(难度⭐)(25)

1. 题目解析 题目链接&#xff1a;DP34 【模板】前缀和 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于计算题目所给区间数组元素和返回即可。 2. 算法原理 为了提高计算效率&#xff0c;我们可以预先计算出一个「前缀…

在github的README.md中插入视频;在github的README.md中添加gif演示动画

最近需要再github中上传项目的源代码&#xff0c;应导师的要求&#xff0c;需要再README中加入对实验视频的展示&#xff0c;但是github的README.md其实就是一个markdown文件&#xff0c;据我的理解这个文件里应该无法直接插入视频吧&#xff1f;&#xff08;如果后续有办法直接…

UE4c++ ConvertActorsToStaticMesh ConvertProceduralMeshToStaticMesh

UE4c ConvertActorsToStaticMesh 创建Edior模块&#xff08;最好是放Editor模块毕竟是编辑器代码&#xff09;创建蓝图函数UBlueprintFunctionLibraryUTestFunctionLibrary.hUTestFunctionLibrary.cpp:.Build.cs 目标:为了大量生成模型&#xff0c;我们把虚幻带有的方法迁移成函…

leetcode 热题 100_三数之和

题解一&#xff1a; 双指针遍历&#xff1a;暴力解法的三层遍历会超时&#xff0c;因此需要优化遍历的过程。首先是需要对结果进行去重&#xff0c;这里采用排序跳过重复值的做法&#xff0c;在指针遍历时跳过已经遍历过的相同值。在第一层循环确定第一个值后&#xff0c;剩下两…

模型部署 - onnx 的导出和分析 -(1) - PyTorch 导出 ONNX - 学习记录

onnx 的导出和分析 一、PyTorch 导出 ONNX 的方法1.1、一个简单的例子 -- 将线性模型转成 onnx1.2、导出多个输出头的模型1.3、导出含有动态维度的模型 二、pytorch 导出 onnx 不成功的时候如何解决2.1、修改 opset 的版本2.2、替换 pytorch 中的算子组合2.3、在 pytorch 登记&…

vscode+remote突然无法连接服务器以及ssh连接出问题时的排错方法

文章目录 设备描述状况描述解决方法当ssh连接出问题时的排错方法 设备描述 主机&#xff1a;win11&#xff0c;使用vscode的remote-ssh插件 服务器&#xff1a;阿里云的2C2GUbuntu 22.04 UFIE 状况描述 之前一直使用的是vscode的remote服务&#xff0c;都是能够正常连接服务…

vue2结合electron开发桌面端应用

一、Electron是什么&#xff1f; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 。允许您保持一个 JavaScript 代码代码库并创建可在Windows、macOS和Linux上运行的跨平台应用 。 Electron 经常与 Ch…

scrapy 中间件

就是发送请求的时候&#xff0c;会经过&#xff0c;中间件。中间件会处理&#xff0c;你的请求 下面是代码&#xff1a; # Define here the models for your spider middleware # # See documentation in: # https://docs.scrapy.org/en/latest/topics/spider-middleware.html…

【快速上手ProtoBuf】基本使用

文章目录 1 :peach:初识 ProtoBuf:peach:1.1 :apple:序列化概念:apple:1.2 :apple:ProtoBuf 是什么:apple:1.3 :apple:ProtoBuf 的使用特点:apple: 2 :peach:创建 .proto ⽂件:peach:3 :peach:编译 .proto 文件:peach:3 :peach:序列化与反序列化的使用:peach: 1 &#x1f351;初…

LeetCode 刷题 [C++] 第45题.跳跃游戏 II

题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i]i j < n 返回到达 nums[n …

【C语言】熟悉文件基础知识

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 文件 为了数据持久化保存&#xff0c;使用文件&#xff0c;否则数据存储在内存中&#xff0c;程序退出&#xff0c;内存回收&#xff0c;数据就会丢失。 程序设计中&…

微信小程序,h5端自适应登陆方式

微信小程序端只显示登陆(获取opid),h5端显示通过账户密码登陆 例如: 通过下面的变量控制: const isWeixin ref(false); // #ifdef MP-WEIXIN isWeixin.value true; // #endif