客户端与服务端
阅读本文大概需要 9 分钟。
口袋方舟编辑器的一大核心功能就是可以让开发者快速便捷的制作一款多人游戏,那么既然是多人游戏,首先要了解一下什么是客户端,什么是服务端。
关于本章节更多内容可以查阅产品手册:网络同步原理和结构 | 产品手册 (ark.online)
1. 客户端与服务端的关系
在口袋方舟中,我们使用了 C/S 网络模型也就是客户端/服务端模型,游戏发布后服务端代码将会运行在口袋方舟官方提供的服务器中,客户端代码运行在用户的设备中。
当用户加入某个游戏后,他的设备将会作为客户端自动连接至服务器中,玩家进入到游戏时在口袋方舟官方服务器中就会启动一个服务端,该服务端能容纳的玩家数量可以在编辑器中设置。后序进入游戏的玩家会优先进入到已经启动的服务端中,当服务端人数已满,服务器就会创建一个新的服务端供后续玩家进入。
连接建立后服务端会自动与客户端同步游戏信息,并且提供了一种与客户端通讯的手段。
更多网络相关查看产品文档:网络同步原理和结构
2. 游戏对象的网络状态
口袋方舟中,我们创建的每个游戏物体(包括脚本),都有三种网络状态,第一种是纯客户端运行,第二种是纯服务端运行,第三种是客户端和服务端运行,要注意的是脚本也是拥有网络状态的,与美术对象不同的是脚本的网络状态代表着它其中代码的运行环境,这里使用表格列出它们的区别。
客户端 Client | 服务端 Server | 客户端和服务端 Client&Server | |
---|---|---|---|
在客户端显示 | ✔ | ❌ | ✔ |
在服务端显示 | ❌ | ✔ | ✔ |
在客户端控制 | ✔ | ❌ | ✔ |
在服务端控制 | ❌ | ✔ | ✔ |
生成方式 | 客户端生成,服务端没有该物体 | 服务端生成,客户端没有该物体 | 服务端生成对象然后同步给客户端,客户端根据同步来的数据再生成这个对象 |
同步方式 | 修改不会自动同步给其它客户端 | 修改会同步给所有客户端 | 修改会同步给所有客户端 |
1. 服务端 Server
在服务端中没有可视化的内容,是由纯数据与逻辑构成的。服务端处理完数据后将会同步给客户端,客户端根据服务端发来的数据做可视化的渲染。
对于脚本来说,如果需要调用数据存储接口就需要让脚本在服务端执行,可以将它的网络状态设置为服务端。
当我们将一个美术对象设置为服务端时,它是没有意义的,因为服务端不会渲染画面,且单服务端也不会向客户端同步数据。
2. 客户端 Client
在客户端中,会根据服务端下发的数据来渲染游戏场景,除此之外还承担着接收玩家输入信息的责任,比如玩家使用了某些道具、点击了 UI 等操作,客户端经过一定的预处理之后发送给服务器。
对于脚本来说与 UI 相关的功能,都需要放在客户端执行。
3.双端 Server & Client
双端,顾名思义客户端和服务端都会存在。单是它在客户端的物体会与服务端保持同步,在服务端对它进行的修改都会自动同步到所有客户端中。
比如我们在服务端修改一个方块的大小,修改完毕后服务端会通知所有客户端该方块的最新大小,客户端搜到消息后自动设置为服务端的大小。
可以将双端物体的客户端部分想象为镜子中的物体,服务端物体的修改会自动同步给客户端的物体。