Unreal Engine 网络系统(一):网络模型及网络视角下的Gameplay框架

个人学习记录,如有错误请及时联系我!欢迎交流!

1.客户端-服务器模型

  • 服务器:有一个客户端担当游戏状态的主控者
    • 作用:做出所有重要决定,保证公平性,包含所有主控状态,处理客户端连接,转移到新地图,处理比赛开始结束等总体游戏流程等。
    • 启动服务器指令:
      • 监听服务器:UE4Editor.exe ProjectName MapName?Listen -game
      • 专用服务器:UE4Editor.exe ProjectName MapName -server -game -log
      • 客户端:UE4Editor.exe ProjectName ServerIP -game

注:启动指令需要在控制台使用,并将虚幻编辑器路径设置在用户环境变量中。专用服务器在默认情况下并不会显示窗口。如果不使用-log,将不会看到任何呈现专用服务器的窗口。 

注:专用服务器,UE允许用户设计专用服务器,与设计客户端-服务器模型一样,专用服务器去掉客户端特性隔绝用户触及游戏数据,保证游戏公平,提升游戏稳定性(客户机运行环境复杂,如果出现崩溃,将导致所有游戏终止)。《绝地求生》使用的就是专用服务器。通过C++源码可以编译独立服务器。

  • 客户端:连接的客户端保持近似副本

2.特点

  • 前端人员(游戏客户端)必须遵循Listen-Server游戏设计原则,将核心逻辑放在“主机端”执行,保证主机端动作合理,客户端即可真正执行动作。
  • Listen-Server体系意味着服务器是权威的所有数据必须先从客户端发送到服务器,然后服务器验证数据并根据代码作出反应
  • 基于以上特点,虚幻网络系统具有高效的开发特性,开发人员可独立完成联网设计。
  • 虚幻网络系统的核心设计点是同步数据和同步行为

 3.网络视角下的Gameplay框架

先直接说结论:

  • GameMode:游戏模式,唯一一个,代表游戏规则,肯定在服务端。
  • GameState:书记员,传教士,传递游戏信息。所有终端都得有。
  • PlayerController:提线木偶的灵魂,负责牵线搭桥。所有终端都有,因为大家都得互相通过服务器传递消息。值得一提的是,Server持有所有Client的PlayerController,因为Server要和所有Client进行沟通,而Client只持有自己的PlayerController,不需要持有其他玩家的状态。

举个栗子:以前的魔兽世界就是Client持有其他Client的状态,当一个玩家掉线了,为了游戏的公平性,此时其他所有玩家都得等这个掉线的玩家;而虚幻的网络模型中Client只需要与Server进行沟通,不与其他玩家进行信息交换。

  • PlayerState:同上,所有终端都有。
  • Pawn:提线木偶,同上,所有终端都有。
  • HUD:自己有。支持有自己的UI。

综上所述,我们可以把持有状态分为以下四种:

  • Server Only
  • Server & Clients
  • Server & Owning Client
  • Owning Client Only

如下图所示

更直观的:

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值