久游网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 138|回复: 1

Unity中如何实现“最最最”简单的游戏网络联机

[复制链接]

1

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-9-22 18:26:57 | 显示全部楼层 |阅读模式
本文是什么?


  • 本文是游戏网络初学者了解游戏网络联机原理的入门文章
  • 本文是如何实现一个小的联机游戏玩具供你和你的好友一起玩耍对战的说明书
  • 本文是提供如何建立最快捷,无第三方服务器,无费用,具有网络联机功能游戏的指南,这种极简的方式也可供网络游戏初步的内部调试使用
  • 本文是提供给独立开发者给自己的游戏加入派对联机功能的指南
本文不是什么?


  • 本文不是说明如何进行游戏网络同步的
  • 本文不是说明如何建立传输层,TCP/IP,UDP通信等
  • 本文不是说明如何实现游戏网络编程的,而是着重于如何建立网络连接的
步骤1:理解游戏网络连接的最简单原理:

理论上来说,只要你知道另一台电脑的公网IP地址和端口号,并且没有防火墙NAT的阻拦,你就可以通过互联网连接到那台电脑进行数据传输,就这样简单,和我们日常打电话一样。这是一种类似于点对点的对等连接,无需借助任何第三方服务器,也就无需任何服务器上的资金花费。这篇文章讲的就是利用这种方法,此方式称为端口转发(Port forwarding)。流程就是,例如你做出了一个带有联机功能的游戏,并发给了你的小伙伴,你打开了游戏先建立了一个主机(同时具备服务器+客户端功能的房间),然后你把你的公网IP地址和端口号发给你的小伙伴,你的小伙伴在游戏中输入这个公网IP地址和端口号,就会通过互联网连接到你的房间,就可以进行对战了。
但是这个流程会有两个阻拦,就是这段话开头说的,一个是防火墙会阻止你的数据传输,这个解决的方法很简单,只要在你的操作系统中允许你的游戏的防火墙权限就可以了。另一个阻拦就是本文的中心主题了,NAT的阻拦。NAT是网络地址转换的缩写,它在你的路由器当中,为什么要进行网络地址转换呢?因为全球的IPv4地址要消耗殆尽了,所以为了避免这个问题,不能每个设备都分配一个IPv4地址,所以用NAT这种东西,让每个网络仅有一个公网IPv4地址,其它连接到路由器的设备都是局域网的私有IP地址。这种方法极大的节省了IPv4的消耗,但是反过来对于我们这篇文章所讲的端到端连接也成为了阻碍。所以,我们要在路由器中设置IP地址的转换和端口的公开,以达到通过互联网进行端到端连接,来完成游戏的联机对战,这种在路由器中执行的操作,就是我们这篇文章所说的端口转发或者叫开放端口(Open)。


步骤2:设置路由器以实现端口转发

首先我们要通过浏览器进入路由器,进入路由器的方式可以查看路由器设备上的说明,通常的地址是192.168.1.1或192.168.0.1。进入路由器后查找端口转发设置项,这个设置项不同厂家的路由器往往名字不同,有的厂家叫做端口映射,有的厂家叫做虚拟服务器,例如我的路由器它叫做端口映射,把每个选项填写完整就可实现端口转发了,具体的要点如下图所示:



每个路由器的端口转发选项都是大同小异的,基本上都是这几个选项,当你看到一个选项栏具备这几项,那就是端口转发的位置了。

当然,你可能对公网IP和局域网IP有所困惑,这里有一个简单的方法找到公网IP和局域网IP。打开百度,输入IP,点击搜索,这个就是你的公网IP。如何查看局域网IP如下图所示:


步骤3:使用你的网络传输层建立主机

这里,传输层的API都大同小异,Unity较流行的网络库例如Photon,Mirror,MLAPI中的传输层都有使用IPv4和端口号建立主机的API,比如:
m_Transport.SetConnectionData(你的公网IP地址, 之前路由器中设置的端口号); //设置连接数据
m_NetworkManager.StartHost(); //建立主机(服务器+客户端),也就是你的游戏房间
这时,你的游戏就已经具备互联网连接功能了,你的小伙伴就已经可以用你的公网IP和端口连接到你的房间了。因为你已经在路由器中做了端口的转发,你的路由器NAT已经再也不能阻止你了。



不借助任何第三方服务器实现端到端的游戏网络连接,无需为游戏服务器花费任何费用

一些故障排除

防火墙:

防火墙是阻碍你进行端口转发的因素之一,所以请确保你为你的游戏程序或Unity开通防火墙权限,这往往在程序的第一次开启时操作系统会询问你,所有当你端口转发失败时请到操作系统中检测是否给了这个程序应有的防火墙权限。
公网IP:

进行端口转发时要检查你是否真正的拥有公网IP。现在有一些运营商已经不给公网IP了,也就是说你在你的路由器上设置了端口转发依旧无效,因为你的IP压根不是公网IP,本质上运营商给你的还是局域网IP,所以你的小伙伴在互联网中根本找不到你(例如你只告诉别人你在7层,但是你到底在哪个楼的7层呢?所以根本无法找到你),检查你的网络是否是公网IP的简单方法是查看你在百度中搜索IP显示的IP地址和你路由器中WAN IP(这个IP可以在路由器中查找到)是否一致,如果一致,则为公网IP,不一致则为私网IP。全球有四组私网IP:

  • 10.0.0.0 – 10.255.255.255
  • 172.16.0.0 – 172.31.255.255
  • 192.168.0.0 – 192.168.255.255
  • 100.64.0.0 to 100.127.255.255
如果你路由器中显示的WAN IP在其中的范围内,那么一定就是私网IP,是无法进行端口转发的,因为在互联网上是不能找到局域网地址的设备的。
解决方法就是找你的运营商的客服,通过微信公众号或者电话都可以,向他申请你需要公网IP,这是不花费任何费用的,注意申请的是公网IP而不是静态IP,客服往往会问你原因,你可以说安装监控,申请成功后重启一下路由器就可以了。大多数情况下都会申请到。请自行尝试。
FAQ

这种方式安全吗?

是安全的,只要你开启了防火墙,只允许你信任的程序通过,就可以保证安全性。
可以用在商业游戏中吗?

在若干年前,这种方式可能较为流行,但是今天可能已经落后了,因为这种方式一来要保证你真的拥有公网IP,二来要求你可以进入路由器,三来要让你的玩家进行手动设置,这都是极大的门槛,所以这种方式已经不流行了。但是作为最简单,最直观,成本最低的网络连接方式,是我们学习网络原理和制作玩具的很好方法。
游戏网络知识的其它入门指南

本文揭示了一个最最简单的游戏网络连接原理,意图就是让游戏网络初学者伙伴可以进行实现和网络的原理理解。但是其中依然涉及到许多东西,比如IP,IP地址,端口,路由器,TCP/IP,UDP,互联网。如果想进一步了解网络,甚至互联网的起源与原理,大家可以自行观看计算机科学速成课的28课和29课。
回复

使用道具 举报

0

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 3 天前 | 显示全部楼层
一直在看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|久游网

GMT+8, 2025-4-18 15:55 , Processed in 0.107235 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表