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

news2024/9/21 20:28:54

目录

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1977246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM:内存结构,直接内存,对象创建,死亡判定

对于从事C、C程序开发的开发人员来说,在内存管理领域,他们既是拥有最高全力的“皇帝”,又是从事最基础工作的劳动人民——既拥有每一个对象的“所有权”,又担负着每一个对象声明从开始到终结的维护责任。对于Java程序员来说&#…

Golang | Leetcode Golang题解之第319题灯泡开关

题目: 题解: func bulbSwitch(n int) int {return int(math.Sqrt(float64(n) 0.5)) }

SSM校园管理系统-计算机毕设定制-附项目源码(可白嫖)48395

摘 要 如今计算机行业的发展极为快速,搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用,其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。自从2020年新冠疫情爆发以来,防疫成了社会关注的重中…

elementUI 的el-date-picker日期,开始时间不能大于结束时间

需求描述&#xff1a;form表单里有开始日期和结束日期&#xff0c;要求开始日期不能大于结束日期&#xff0c;但是开始日期可以等于结束日期。 效果如下&#xff1a; 实现代码&#xff1a; <el-form ref"form" :model"form" :rules"rules" …

UNI-APP_点击,长按,触摸,结束触摸事件

touchstartEventHandle手指触摸动作开始字节跳动小程序不支持touchmoveEventHandle手指触摸后移动字节跳动小程序不支持touchendEventHandle手指触摸动作结束字节跳动小程序不支持touchcancelEventHandle手指触摸动作被打断&#xff0c;如来电提醒&#xff0c;弹窗字节跳动小程…

errno错误码列举

errno&#xff0c;int变量&#xff0c;表示系统最近一次错误码。 当系统调用和一些库函数发生错误时&#xff0c;会给errno赋值&#xff0c;以指示哪里出了问题。 目录 errno值列表 errno值获取示例 errno值列表 <errno.h>头文件定义了errno的一些值&#xff0c;部分…

Spring MVC框架面试题

目录 一、什么是SpringMVC&#xff1f;简单介绍下你对SpringMVC的理解&#xff1f; 二、SpringMVC的流程&#xff1f; 三、SpringMVC的优点 四、SpringMVC的主要组件 五、SpringMVC怎么样设重定向和转发的&#xff1f; 六、SpringMVC怎么和Ajax相互调用的&#xff1f; 七…

Python酷库之旅-第三方库Pandas(064)

目录 一、用法精讲 251、pandas.Series.tz_localize方法 251-1、语法 251-2、参数 251-3、功能 251-4、返回值 251-5、说明 251-6、用法 251-6-1、数据准备 251-6-2、代码示例 251-6-3、结果输出 252、pandas.Series.at_time方法 252-1、语法 252-2、参数 252-3…

【java】单行注释(//)与多选注释(/* */)

文章目录 单行注释多行注释注意事项 在Java中&#xff0c;注释是用来给代码添加说明的&#xff0c;它不会被编译器执行。Java提供了两种主要的注释方式&#xff1a;单行注释和多行注释&#xff08;有时也称为块注释或块级注释&#xff09;。 单行注释 单行注释以两个正斜杠&…

爬小红book--自定义获取

免责声明:本文仅做分享!!! from DrissionPage import ChromiumPage import time pa str(input("输入关键词&#xff1a;")) pl str(input("输入评论内容&#xff1a;")) page ChromiumPage() page.get(https://www.xiaohongshu.com/search_result?keyw…

php生成xml文件的封装类文件-可生成带缩进格式化的xml文件及关于opcache缓存的操作小工具cachetool的使用

一、php生成xml文件的封装类文件-可生成带缩进格式化的xml文件 最近因为有需要&#xff0c;对生成xml文件进行了一些处理&#xff0c;很早之前使用过SimpleXML加载接口返回的xml数据并处理&#xff0c;这次的使用偏向于XML文件的生成。有一个需求&#xff0c;生成的xml文件格式…

【保姆级讲解下AI绘画自动生成器有哪些?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

CICD流水线

一、CICD流水线简介 CICD概念 CI/CD流水线是现代软件开发的一个核心概念&#xff0c;它涉及自动化和管理软件从开发到部署的整个生命周期 概念定义 具体有三点&#xff1a;持续集成、持续交付、持续部署 流水线组成为&#xff1a;代码提交、测试、构建、部署、结果通知 二…

营销型豆浆机料理机网站模板/EyouCMS营销型类企业模板

营销型豆浆机料理机网站模板&#xff0c;EyouCMS营销型类企业模板。模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xff0c;原创设计、手工书写DIVCSS&#xff0c;完美兼容IE7、Firefox、Chrome、360浏览器等&#xff1b;主流浏览器&#xff1b;结构容易优化&#xff…

雨量气象站:实时、准确地监测并记录降水情况

在自然界的水循环中&#xff0c;雨&#xff0c;作为天空与大地的信使&#xff0c;不仅滋养了万物&#xff0c;也影响着人类社会的方方面面。为了更准确地监测和预测降水情况&#xff0c;雨量气象站应运而生&#xff0c;成为了现代气象观测体系中重要的一环。 雨量气象站&#x…

FFmpeg源码:av_reduce函数分析

AVRational结构体和其相关的函数分析&#xff1a; FFmpeg有理数相关的源码&#xff1a;AVRational结构体和其相关的函数分析 FFmpeg源码&#xff1a;av_reduce函数分析 一、av_reduce函数的声明 av_reduce函数声明在FFmpeg源码&#xff08;本文演示用的FFmpeg源码版本为7.0…

P10477 题解

题目传送门 题目传送门&#xff08;洛谷&#xff09; Step1 理解题意 一共有 T T T 组数据有一个地铁&#xff0c;有一个中心车站&#xff08;即为根&#xff09;&#xff0c;有一个人从中心车站出发。对于每组数据&#xff0c;给定两个同样长度的01串 s 1 s_1 s1​ , s …

五、MYSQL企业常用架构与调优经验理论篇

&#x1f33b;&#x1f33b; 目录 一、选择 PerconaServer、MariaDB 还是 MYSQL二、常用的 MYSQL 调优策略三、MYSOL 常见的应用架构分享四、MYSOL 经典应用架构 注&#xff1a;全是理论干货&#xff0c;没有实战&#xff0c;想看实战的绕路哦&#xff01;&#xff01;&#xf…

ScriptEcho:AI赋能的前端代码生成神器

ScriptEcho&#xff1a;AI赋能的前端代码生成神器 在前端开发中&#xff0c;如果你总是觉得写代码太费时费力&#xff0c;那么 ScriptEcho 将成为你的救星。这个 AI 代码生成平台不仅能帮你省下大量时间&#xff0c;还能让你轻松愉快地写出生产级代码。本文将带你了解 ScriptEc…

Java中spring boot validation 自定义注解使用

创建一个注解 Target({ElementType.FIELD})//需要写注解的三三个要素 Retention(RUNTIME) Documented Constraint(validatedBy {IsSystemYesNoVaildation.class})//绑定 在这里会报错 你需要去实现 public interface IsSystemYesNo {String message() default "数据字典&…