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

目录

  • [0 引言](#0 引言)
  • [1 核心内容](#1 核心内容)
    • [1.1 Gameplay各部分创建的流程](#1.1 Gameplay各部分创建的流程)
    • [1.2 Gameplay框架在DS和客户端的存在情况](#1.2 Gameplay框架在DS和客户端的存在情况)
    • [1.3 数据是独立存在于DS和客户端的](#1.3 数据是独立存在于DS和客户端的)
  • [2 Gameplay框架各自负责的功能](#2 Gameplay框架各自负责的功能)
    • [2.1 GameMode](#2.1 GameMode)
    • [2.2 GameState](#2.2 GameState)
    • [2.3 PlayerController](#2.3 PlayerController)
    • [2.4 PlayerState](#2.4 PlayerState)
    • [2.5 Pawn](#2.5 Pawn)
    • [2.6 AIController](#2.6 AIController)
    • [2.7 Actor](#2.7 Actor)
    • [2.8 HUD](#2.8 HUD)
    • [2.9 UI](#2.9 UI)
  • 🙋‍♂️ 作者:海码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元素通常只在客户端上存在,负责显示和处理本地玩家的交互。

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

相关推荐
qcx2320 小时前
【系统学AI】09 Multi-Agent架构(2026版):从学术理论到工业级实践
java·人工智能·架构·multi-agent·claude agent
wb0430720121 小时前
厨房质检员——从阿明的“祖传配方“到标准化质检,看测试金字塔的落地
架构·log4j
Dongwoo Jeong21 小时前
微服务架构(MSA)是如何诞生的?
微服务·云原生·架构
代龙涛21 小时前
WordPress page.php 页面模板与自定义模板使用方法
android·开发语言·php
Cheng小攸21 小时前
综合实验2
网络·windows
Soari1 天前
SSH 主机密钥冲突
运维·网络·ssh
张忠琳1 天前
【kubernetes v1.21】(kubelet 1)Kubelet 核心架构与启动流程
云原生·架构·kubernetes·kubelet
用户987409238871 天前
超算中心 高性能计算 htc命令module use的作用
架构
AI科技星1 天前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
__log1 天前
如何优雅地“借鉴”任何网站的设计系统
人工智能·架构·知识图谱