如果你要制作一个能联网的游戏,无论是网络游戏还是局域网游戏都离不开网络通信,网络游戏一般是一个服务器对应多个客户端,如图:

多个玩家访问一台服务器,每个玩家实际上是一个客户端,在这里我们列举两个小例子。

玩家登录后需要显示玩家的角色相关数据比如装备,道具。

玩家的数据是存在服务器端数据库的,想要得到这些数据必须从服务器获得,

这个过程分为两步:

第一步:玩家向服务器发送请求数据(客户端=>服务器);

第二步:服务器收到玩家发送的请求数据信息,读取玩家信息返回数据给玩家(服务器=>客户端);

第三步:玩家收到服务器数据,显示到unity里。

网络游戏里有十个玩家,为什么一个玩家走路,其他玩家都能看到这个玩家往哪里走呢?这个过程,其实现思路就是分这几步实现的:

第一步:玩家1向服务器发送自己当前的位置数据(客户端=>服务器);

第二步:服务器收到玩家1发送的自己的当前的位置数据;

第三步:服务器把玩家1的位置发送给剩余的9个玩家(服务器=>客户端);

第四步:剩余的9个玩家收到了玩家1的当前的位置数据;

第五步:根据收到的玩家1的位置数据显示到unity里。

我们发现网络游戏数据走向一般分为两种情况。

1(客户端=>服务器)数据从客户端发送到服务器,这种情况叫请求。

2(服务器=>客户端)数据从服务器返回到客户端,这种情况叫响应。

所以,网络游戏开发中,玩家玩游戏时,大部分情况都是一个请求对应一个响应来进行的。

玩家登录发送登录请求,数据包含玩家账号密码,服务器处理后下发登录响应 ;

玩家购买道具发送购买请求,服务器处理后返回购买后获得的道具和消耗的钱币;

玩家更换阵容发送更换阵容请求,服务器处理后返回更换阵容成功失败;

玩家穿上装备发送穿装备请求,服务器处理后返回装备更换;

……

了解了这个客户端与服务器一个请求对应一个响应交互的过程后,下一步我们需要关心的是数据如何发送,发送什么样的数据。

网络通信中的数据是以字节数组的形式进行传输,我们需要把代码中的int,string等类型转换成字节数组发送出去,买二手QQ平台字节数组听起来很抽象,那么实际上字节数组是什么东西呢,以一个int为例,来看看字节数组和int之间到底有什么关系。

新建一个c#控制台程序,写一段测试代码。

运行起来后,控制台打印。

接下来我们来找一下规律。

1对应的字节数组是 1,0,0,0
10对应的字节数组是10,0,0,0
255对应的字节数组是255,0,0,0
258对应的字节数组是2,1,0,0
2560对应的字节数组是0,10,0,0
256*256对应的字节数组是0,0,1,0
256*256*256对应的字节数组是0,0,0,1
256*256*256 + 3对应的字节数组是3,0,0,1

由此我们可以看到每个int类型的变量转换成byte数组里面共有4个元素。

第一个位置代表2的0次方;
第二个位置表示2的8次方;
第三个位置表示2的16次方;
第四个位置表示2的24次方。

如果我们发送两个int类型数据,1和10,它转换的byte数组是这样的1,0,0,0,10,0,0,0

这就是一个int类型转换成byte数组占4个字节的原因啦,同理我们可以研究下其他类型的转换,我在这里就不一一细说了,大家自行编写测试代码进行打印查看即可。

好了,到了这里应该已经明白了在网络传输的数据是什么样的了,知道了网络传输数据结构将会为你以后实现网络通信编码打下一个基础,以后进行网络编程时就不会慌了。

Unity联网游戏基础原理与字节数组相关推荐

  1. 加密解密基础问题:字节数组和(16进制)字符串的相互转换

    在加密时,一般加密算法和hash算法,它们操作的都是字节数组,对字节数组按照加密算法进行各种变换,运算,得到的结果也是字节数组.而我们一般是要求对字符串进行加密,所以就涉及到字符串String到 by ...

  2. 基础的unity局域网游戏框架(一)

    最近看了下关于unity的网络模块netwrok即将淘汰,思索了下准备自己用socket去封装个局域网的通讯插件 看了一下关于同步问题 https://www.jianshu.com/p/fbd8ed ...

  3. 《Unity 3D 游戏开发技术详解与典型案例》——1.1节Unity 3D基础知识概览

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.1节Unity 3D基础知识概览,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

  4. 【Unity入门教程】 第八章 人工智能【中国大学MOOC游戏引擎原理及应用】

    以下均为来自中国大学mooc 游戏引擎原理及应用时的学习笔记,不含商用,仅供学习交流使用,如果侵权请联系作者删除. 文章目录 8.1 自动寻路 8.2 巡逻 8.3 视野 8.4 自动攻击 8.5 追 ...

  5. 【Unity】Unity 2D游戏开发(一)U2D基础功能

    文章目录 Unity 2D游戏开发基础知识 Animation动画 SortingLayer层排序 Physics 2D物理2D Rigidbody 2D刚体 示例 1.点击鼠标发出子弹 2.子弹打中 ...

  6. Unity小游戏-惊爆游戏(PC)3D联网大逃杀游戏 项目展示+完整项目源码

    游戏录像 游戏玩法 1.类似吃鸡的小游戏,但是这里没有毒圈,武器只有炸弹,没有枪. 2.游戏开始后所有人的体力会不断下降,当体力下降到0就会死亡. 3.玩家只有吃食物增加体力才能活下去,而食物只能通过 ...

  7. Flash 联网游戏开发基础课程

    最新提示: A 课程 4月3号开始.课程刚刚开始... 课程主要教授AS3面向对象编程知识以及Flex开发环境.[适合的人群]适合那些还没有足够AS3编程经验以及不熟悉面向对象方式编程的开发者,比如: ...

  8. Unity 简单联网游戏(双人五子棋)开发(二)

    前言:之前我们尝试开发了一个两个比拼分数的不像游戏的超简单的弱数据联网游戏,主要是想让一些没开发过联网游戏的人了解一下最基础的流程:不过有人仍然有人私信我表示看不懂,所以这次我们再开发一个类似的游戏, ...

  9. 树状数组基础原理与模板

    树状数组 2021年7月29 1.算法原理 树状数组解决什么问题? 解决区间上点更新与维护的问题.如更改某些点值求区间和,或求某位前有多少比其小的问题. 其实现的原理是什么? 首先看图: 在这个图中, ...

最新文章

  1. python安装email模块_Python使用SMTP模块、email模块发送邮件
  2. 操作系统实验报告9:进程间通信—管道和 socket 通信
  3. c++关联容器的成员函数find的一个例子
  4. java能过吗_java – 你能通过例子解释AspectJ的cFlow(P u00...
  5. js请求结果拦截机器_CefSharp请求资源拦截及自定义处理
  6. 【Hibernate】性能优化之缓存管理
  7. Spring Boot与JWT整合实现前后端分离的用户认证
  8. ng-bind-html在ng-repeat中问题的解决办法
  9. Android studio 无法启动安卓模拟器
  10. 那些花儿,从零构建Vue工程(webpack4 Eslint git hooks...)
  11. 瀏覽器擴展──釋放你的個性
  12. xshell修改linux编码,xshell更改字符编码,xshell系统设置中文乱码怎么解决
  13. AD快捷键及常用操作
  14. 亿航白鹭落户西安建丝路总部,为“硬科技之都”插上双翼
  15. 批处理删除指定文件或文件夹
  16. think PHP前台模板,thinkphp5(二)前台模板的引入
  17. 单行道行车模拟(元胞自动机)——greatji1994
  18. CG标准函数库——数学函数(GPU编程与CG语言之阳春白雪下里巴人)
  19. shell输出标准时间格式
  20. MFC CString 长度取得

热门文章

  1. 从全职高手开始的系统_《全职高手》让杨洋“去油”,却不是他的“救命稻草”...
  2. 佳能hdr_相机缺货潮将至?索尼、佳能、尼康都可能受波及?
  3. 框架中的左侧菜单关联右侧页面是如何实现的_前端基础学习:Vue2.0实现移动端外卖平台项目,参考旧版饿了么!...
  4. nginx mac 服务器 html,Mac上搭建 nginx 服务器
  5. 队列读取器代理 遇到错误 Row handle is invalid
  6. HTML5新增的一些特性
  7. Mysql 索引的基础(下)
  8. [ccf 4] 网络延时
  9. TCP拥塞状态机的实现(中)
  10. 32-bit到64-bit 开发及升级经验