【UE 网络】Gameplay框架在DS架构中的扮演的角色

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:UE虚幻引擎专栏
  • 💥 标题:【UE 网络】Gameplay框架在DS架构中的扮演的角色
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎大家留言讨论。

0 引言

今天早上思考了一下UE的Gameplay框架。发现自己对Gameplay框架的理解从浅入深,最开始做的是数字孪生类型的项目,所以没有游戏的概念,只知道Actor,UObject,Component几个组合运用,对于其他的部分不太熟悉,不知道为什么要这样区分设计。

随着然后做了一个单机游戏之后发现不用部分分别管理不同的功能,例如GameMode是用于游戏规则的定义,PlayerController是用于玩家控制角色Pawn等。最后做了几个多人游戏项目,又对框架又有了更新的理解,不同部分在网络中扮演的角色也不一样,例如PlayerController是充当DS服务器和客户端通信的桥梁,GameMode仅存在于DS服务器,游戏规则中需要所有玩家都知道的信息则依赖GameState同步信息给客户端。

b站安宁Ken视频教程(非常好)
绿洲编辑器网络框架参考视频(讲的非常好)

1 核心内容

1.1 Gameplay各部分创建的流程

为了更清晰地理解 UE4 在Dedicated Server(DS)网络框架中的关键部分创建过程,将详细解释一下每个步骤:

  1. DS服务器启动: Dedicated Server(DS)启动后,首先会初始化游戏世界并创建必要的管理对象。

  2. 创建GameMode对象:服务器上会创建一个GameMode对象。GameMode是服务器端的游戏规则管理器,负责处理游戏逻辑、规则和流程。注意,GameMode只存在于服务器上,客户端没有这个对象。

  3. 创建GameState对象:服务器上会创建一个GameState对象。GameState是一个可复制的对象,用于在服务器和所有客户端之间共享游戏状态信息。GameState会被复制到所有客户端,以确保每个客户端都能访问到一致的游戏状态。

  4. 等待客户端加入游戏会话:服务器初始化完成后,会等待客户端的连接请求。当客户端请求加入游戏会话时,服务器会处理该请求。

  5. 创建PlayerController:当客户端成功加入游戏会话后,服务器会为该客户端创建一个PlayerController对象。PlayerController负责处理玩家的输入和控制逻辑。服务器上的PlayerController会将必要的信息同步到客户端,客户端会创建一个对应的PlayerController实例。

  6. 创建PlayerState对象:服务器会为每个PlayerController创建一个PlayerState对象。PlayerState是一个可复制的对象,用于存储与玩家相关的状态信息(如分数、生命值等)。PlayerState会被复制到所有客户端,以确保每个客户端都能访问到一致的玩家状态。

  7. 创建PlayerPawn对象: 服务器会为每个PlayerController创建一个PlayerPawn对象。PlayerPawn是玩家在游戏世界中的表示,负责处理物理和视觉表现。PlayerController会控制PlayerPawn的行为。

  8. 同步信息到客户端:服务器会将PlayerController、PlayerState和PlayerPawn的相关信息同步到客户端。客户端会创建对应的实例,并根据服务器的指令更新这些对象的状态。

  9. 客户端与服务器的交互:客户端的PlayerController会将玩家的输入(如移动、射击等)发送到服务器上的PlayerController。服务器上的PlayerController会处理这些输入并更新游戏状态,然后将更新后的状态同步回客户端。

总结来说,整个过程确保了服务器端的权威性,同时通过网络复制机制将必要的信息同步到客户端,以确保客户端能够正确地响应玩家的输入并显示一致的游戏状态。

在这里插入图片描述

1.2 Gameplay框架在DS和客户端的存在情况

理解Gameplay框架各个关键部分在DS和客户端上存在的情况能极大的帮助网络游戏的开发。如下图所示:

下面这个图是 Listen Server 的图,在DS模式下,Server端是没有UI的,也没有PlayerController_Server。
在这里插入图片描述

在理解了各个部分的存在位置,我们就可以避免一些常见的错误逻辑,例如:

  • 在某个客户端上获取所有的PlayerController
  • 在服务器上获取HUD对象
  • 在客户端上直接生成Actor
  • 在客户端获取AIController,AIController只存在于服务器上

1.3 数据是独立存在于DS和客户端的

在服务器和客户端上各自的数据其实是独立的,只是通过复制的方式让数据保持一致。本质上还是两份数据,为什么要强调这一点呢,因为有些时候会有一些错误的操作,例如通过Server RPC,将一个Actor通过参数的形式传递给服务器,在服务器上对这个Actor进行一些操作,这样是不对的。

在Unreal Engine(UE)的网络框架中,服务器和客户端上的数据确实是独立的,尽管通过网络复制机制保持一致性。这一点非常重要,因为它影响了如何正确地进行网络编程和数据同步。下面是一些关键的解释:

  1. 独立的数据副本:服务器和客户端各自维护独立的数据副本。通过网络复制(Replication)机制,服务器会将其数据状态同步到客户端,但本质上它们是两份独立的数据。

  2. 网络复制机制:网络复制是指服务器将其数据状态(如Actor的属性、位置等)复制到客户端,以确保客户端显示的状态与服务器一致。这种复制是单向的,即从服务器到客户端。

  3. Server RPC(Remote Procedure Call):Server RPC是客户端请求服务器执行某些操作的机制。客户端可以通过Server RPC向服务器发送请求,服务器接收到请求后执行相应的逻辑。

  4. 错误的操作示例:错误操作是指通过Server RPC将一个Actor作为参数传递给服务器,然后在服务器上对这个Actor进行操作。这是不正确的,因为客户端和服务器上的Actor实例是独立的,直接传递客户端的Actor实例到服务器是无效的。

2 Gameplay框架各自负责的功能

将游戏中不同的功能部分,划分给对应的框架模块,可以让整个工程逻辑清晰,管理方便。

2.1 GameMode

功能:

  • 游戏规则:定义游戏的规则和逻辑,如胜利条件、回合机制等。
  • 玩家生成:管理玩家的生成点和生成逻辑。
  • 游戏流程:控制游戏的整体流程,如游戏开始、结束等。
  • 仅在服务器上存在:GameMode只在服务器上存在,负责管理服务器端的游戏逻辑。

作用:GameMode是服务器权威性的核心部分,确保游戏规则和流程在服务器上得到正确执行。

2.2 GameState

功能:

  • 全局状态:存储游戏的全局状态信息,如当前游戏时间、回合数、比分等。所有玩家都需要知道的信息存储在这里
  • 状态同步:通过网络复制(Replication)将状态同步到所有客户端。
  • 在服务器和客户端上都存在:GameState在服务器和所有客户端上都存在,确保所有客户端都能访问到一致的游戏状态。

作用:在服务器和客户端之间共享游戏状态,确保所有玩家看到一致的游戏信息。

2.3 PlayerController

功能:

  • 玩家输入:处理玩家的输入并将其转换为游戏中的动作。
  • 控制逻辑:管理玩家的控制逻辑,如移动、攻击等。
  • 在服务器和对应的客户端上都存在:PlayerController在服务器和对应的客户端上都存在,负责处理 本地玩家 的输入和控制。

作用:

  • 输入处理:在客户端上接收玩家输入,并通过 Server RPC 将其发送到服务器。
  • 控制同步:在服务器上处理输入并更新游戏状态,同时通过 Client RPC 将必要的信息同步到客户端。

2.4 PlayerState

功能:

  • 玩家状态:存储与玩家相关的状态信息,如分数、生命值、攻击力、buff等。
  • 状态同步:通过网络复制将状态同步到所有客户端。
  • 在服务器和客户端上都存在:PlayerState在服务器和所有客户端上都存在,确保所有客户端都能访问到一致的玩家状态。

作用: 在服务器和客户端之间共享玩家状态,确保所有玩家看到一致的玩家信息。

2.5 Pawn

功能:

  • 玩家表示:表示玩家在游戏世界中的位置和状态。
  • 物理和视觉表现:处理玩家的物理和视觉表现,如移动、动画等。
  • 在服务器和客户端上都存在:Pawn在服务器和所有客户端上都存在,负责同步玩家的状态。

作用:通过网络复制将Pawn的状态(如位置、旋转等)同步到所有客户端,确保所有玩家看到一致的游戏世界。

2.6 AIController

功能:

  • AI逻辑:管理AI角色的行为和决策逻辑。
  • 控制AI角色:控制AI角色的移动、攻击等行为。
  • 在服务器上存在:AIController通常 只在服务器上存在,负责管理服务器端的AI逻辑。

作用:在服务器上管理AI角色的行为和决策,确保AI角色在游戏中的表现符合预期。

2.7 Actor

功能:

  • 游戏对象:表示游戏中的任何对象,如道具、环境物体等。
  • 功能模块:可以包含各种组件(如渲染、物理、音频等)来实现特定功能。
  • 在服务器和客户端上都存在:Actor可以在服务器和客户端上都存在,也可以仅在服务器或客户端上存在,具体取决于Actor的类型和用途。

作用:在服务器和客户端之间管理和同步游戏对象,确保游戏世界的一致性。

2.8 HUD

功能:

  • 用户界面:在屏幕上显示游戏信息,如健康条、分数等。
  • 仅在客户端上存在:HUD只在客户端上存在,负责显示本地玩家的游戏信息。

作用:在客户端上显示游戏信息,提供玩家与游戏的交互界面。

2.9 UI

功能:

  • 用户界面:包括菜单、按钮、文本等,用于与玩家进行交互。
  • 交互逻辑:处理用户输入并触发相应的游戏逻辑。
  • 仅在客户端上存在:UI元素通常只在客户端上存在,负责显示和处理本地玩家的交互。

作用:在客户端上提供用户界面,允许玩家与游戏进行交互,如选择菜单选项、查看状态信息等。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UE4Gameplay框架是一个强大的工具集,用于开发和实现游戏玩法和用户交互。该框架提供了许多功能和组件,以帮助游戏开发者快速构建出丰富、流畅的游戏体验。 UE4的Gameplay框架主要由以下几个方面组成: 1.输入系统:该系统可以处理各种输入设备的操作,如鼠标、键盘和游戏手柄。开发者可以轻松地设置和管理输入映射和按键绑定。此外,还提供了鼠标和手柄的即时响应和移动方向控制功能,使玩家能够自由操作游戏角色。 2.角色控制器:角色控制器是游戏玩家在游戏扮演角色,他们的控制是通过输入系统和蓝图来实现的。游戏玩家可以移动角色、执行动作、攻击敌人等。角色还可以通过动画系统实现自然的运动和交互。 3.人工智能:UE4的Gameplay框架提供了内置的人工智能系统,可以对NPC和敌人进行编程控制。开发者可以设置敌人的行为模式、路径寻找和攻击策略,让游戏的敌人具有更真实和智能的表现。 4.物理模拟:UE4的Gameplay框架使用了物理引擎来实现真实的物理模拟效果,比如碰撞、重力和刚体运动等。这使开发者能够创建更真实和具有交互性的游戏世界,使玩家可以与环境进行互动。 总之,UE4的Gameplay框架提供了强大而灵活的工具,帮助开发者轻松地构建出丰富多样的游戏玩法和用户交互。无论是开发动作冒险游戏、射击游戏还是角色扮演游戏,该框架都能满足开发者的需求,并带来令人惊叹的游戏体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值