游戏脚本高级编程_godot游戏引擎实现TCP和UDP(网络联机,多人游戏)

godot游戏引擎提供的高级网络其实已经封装好了各种网络联机必备的功能,对于游戏制作者来说,只需要直接调用就可以了,用起来其实很方便。

29089289f6b03fe52aec360670e9b620.png
godot游戏引擎封装的高级网络

但实际上就算是造好的轮子,如果没有好的文档,也是很难学会使用的。尤其是封装了底层实现之后,往往会提出一些新的概念去概括实现的功能。

而godot游戏引擎就在自己的高级网络中提出了一个主人和傀儡的概念,这个概念在官方文档中的解释非常的难以理解,从去年8月就有人问过怎么理解这个概念,至今都没有通俗的回答。

b4fd1d25ed3823d860c32ba3613955ea.png
至今未解的主人和傀儡

在没有足够的文档和教程的支持下,我只能先放弃godot的高级网络,使用传统的底层网络,就是著名的TCP和UDP

-----更新分割线-----

最近发现有国内教程对主人和傀儡关键字解释了,疑难解答终于来临,大家如果要学习高级网络可以跳转到这里:

刘庆文:Godot游戏开发实践之一:用High Level Multiplayer API制作多人游戏(上)​zhuanlan.zhihu.com
ece07157fc3472bcebfecf134078cda5.png

注意,以下内容继续讲底层网络,不是高级网络,大家如果要学习高级网络,就看上面这个链接就行了。

-----以上是更新内容-----

godot游戏引擎的GDScript作为脚本语言,其实对TCP和UDP也有一定的封装。不过因为调用方法是相似的,因此可以依赖TCP和UDP海量的教程和文档去理解,实现起来还是很方便的。

下面介绍在godot游戏引擎中TCP和UDP的最简实现方法,注意:最简实现仅用于学习,不是最佳实现,最简实现是以最少的代码来实现,只是为了方便学习和参考。

首先是在godot游戏引擎中实现最简单的TCP服务器,去掉注释和换行仅9行代码:

b0bc5fbe3e078bb66289c8d62986317b.png
godot游戏引擎实现最简TCP服务器

可以看到,GDScript还是非常简短的,这也是作为脚本语言的最大的优势。TCP服务器其实就是持续监听一个地址,有客户端连接后就获取客户端的套接字(socket),然后通过套接字来获得客户端发来的信息。

注意:这段代码虽然使用了_process()函数(每帧运行函数)来循环来持续获得客户端连接,但_process()函数可能由于帧率下降导致意外结果,最佳实现应该是使用while循环。方便大家复制代码:

extends 

然后是在godot游戏引擎中实现最简单的TCP客户端,去掉注释和换行仅6行代码:

051a00993e92756b2ce88436fefc447d.png
godot游戏引擎实现最简TCP客户端

TCP客户端就是通过地址和端口来连接到服务器,看图中的注释就能理解,这段代码还发送了一个测试用的数据(字符串)。方便大家复制代码:

extends 

TCP介绍完了,接下来是UDP。

首先是在godot游戏引擎中实现最简单的UDP接收方,去掉注释和换行仅7行代码:

09b32bcdec272828f3742927298e5bf7.png
godot游戏引擎实现最简UDP接收信息

和上面的TCP不一样,这段代码会阻塞程序让程序卡住(未响应),直到接收到消息后继续运行,运行这段代码很容易让没有编程经验的新手误以为自己死机了。(令我惊讶的是godot游戏引擎作为对编程有一定要求的游戏引擎,竟然能吸引到不懂编程的人来使用)

而且为了简化代码,这段程序没有循环,接收到消息后就运行结束了,仅运行一次,不再接收消息。方便大家复制代码:

extends 

然后是在godot游戏引擎中实现最简单的UDP发送方,去掉注释和换行仅5行代码:

ebcecf98b48eb682c25c43d021442c9d.png
godot游戏引擎实现最简UDP发送信息

大概是最简短的部分了,甚至可以说连流程都非常清晰。新建UDP对象绑定地址发送数据,一句代码就表示一个流程,这就是我喜欢脚本语言的原因,写起来是真滴爽。方便大家复制代码:

extends 

以上就是UDP和TCP的最简实现了,虽然直接复制到godot游戏引擎里就可以直接运行,但是以上代码都不是最佳实现,是为了方便学习而专门精简的。

如果要理解这些函数真正的用法以及完整的参数,可以在godot的内置帮助里搜索函数名称:

130263963757242cb460271add2b237f.png
godot游戏引擎的“搜索”可以查找内置帮助

godot的内置帮助是一个完整的离线api,会列出函数的所有参数和一些简短的说明。

提示:虽然以上展示的代码都用ipv4地址,但是godot游戏引擎是支持ipv6的。

c00c5c138a6328f3f795995c1fb6c089.png
godot游戏引擎支持ipv6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值