个人学习记录,如有错误请及时联系我!欢迎交流!
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
如下图所示
更直观的:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)