虚幻引擎网络系统(一)
网络游戏构成必要条件
1,终端用户(客户端)
2,联网硬件环境
3,伺服器(服务器)
4,数据传输通信协议
伺服器
提供计算服务的设备。由于服务器需要响应服务请求,并进行处理
计算逻辑更复杂,响应更快,并发连接数更大,升级难度更高。适应性更广泛,数据处理及时性要求严格。
客户端
将玩家操作收集,逻辑操作反馈给服务器,在服务器进行整理再做下发广播。客户端设计的繁琐度高,制作难度大。
虚幻网络框架
并没有提供数据库存储解决方案(要状态存储需要使用者自行设计)
更适合”局“
产品层(非引擎层)数据交互解决方案,提供”数据同步“和”行为同步“。虚幻引擎中不需要处理网络连接逻辑,制定通信协议,寻找数据压缩策略,协议序列化策略,包括硬件通信协议。
虚幻用的RPC
客户端-服务器模型
启动服务器指令
类型 | 启动命令 |
---|---|
监听服务器 | |
专用服务器 | |
客户端 |
监听服务器—— 一个玩家扮演房主身份
专用服务器——《绝地求生》
可以通过C++源码可以编译独立服务器
Listen-Server
核心设计——同步数据和行为
虚幻引擎框架角色网络分布
虚幻引擎框架中的角色,他们在那里(主机端还是客户机端)
-
GameMode(只在服务器)
-
GameState 在所有终端都有
-
PlayerController 自己终端有自己的,但没有别人的,服务器有所有终端的
-
PlayerState 自己有自己的,自己有别人的,服务器有所有终端的
-
Pawn 在所有终端都有
-
HUD 自己有自己的,自己没有别人的,服务器也没有别人的
GET Controller获取的是自己的控制器
GET Player Controller获取的是当前终端的控制器
所有位置分类
- Server Only
- Server &Clients
- Server &Owning Client
- Owning Client Only
**
地图加载同步
**
虚幻中的同步单位——actor
是否场景中摆放的物体启动时都会同步到所有终端?
默认是会同步到所有终端,但是他们没有做网络关联!
”Net Load On Client“选项默认是勾选的
没开的时候:
动态生成的Actor是否会同步到所有终端?(需要考虑在哪里生成)
当场景中摆放的Actor需要进行网络同步时,需要在细节面板勾选”Replicates“,该选项默认关闭,需要设计者根据需求开启。
生成和销毁
在服务器生成Actor时,如果生成类开启了”Replicates“,则会同步到所有终端
当在服务器销毁Actor时,如果Actor开启了”Replicates“,则所有终端中的关联对象均会被销毁
不能同步动作!!!
虚幻对于同步操作提供了两种方式——行为同步和属性同步
行为同步
Actor网络身份(区分客户端or服务端)
网络中的身份可以帮助我们更好的 甄别 当前对象和 当前所在终端的关系,并且可以帮我们判断当前对象所在的终端类型
身份授权类别
-
Simulated
远程代理。拾取物,发射物,交互对象
-
Autonomous
远程代理,本地执行部分功能,但会受到服务器端的矫正。Pawn
-
Authority
服务器端存在标记,表明当前Actor会将信息复制到其他机器上进行远程代理
-
None
此对象在网络中没有开启同步