IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> UE4联网actor和变量复制 (第四部分) -> 正文阅读

[游戏开发]UE4联网actor和变量复制 (第四部分)

Actor 的复制

4.4 在蓝图中同步变量

介绍了如何使用 Actor 上的 Replicates 选项,以使其在服务器和客户端机器上显示(或不显示)。在列举的两个示例中,同步 Actors 示例介绍了如何将 Actor 设置为同步以及同步和非同步的 Actor 之间的区别。第二个示例说明了如何通过使用 Switch Has Authority 节点(此节点检查当前正在运行蓝图脚本的是服务器还是客户端)动态生成和控制 Actor 的显示位置

4.4.1 同步 Actor

在此示例中,我们使用的是带有 初学者内容包第三人称模板 蓝图项目。

在这里插入图片描述

取消选中此选项后,加载地图时,这个 Actor 将不会在客户端上自动加载由于 Replicates 也未勾选,所以就算它应该被创建出来的时候,这个 Actor 也不会在客户端上显示。

步骤说明了如何将 Actor 设置为 Replicate,以及 Replicate 的 Actor 和非 Replicate 的 Actor 之间的区别。

在这里插入图片描述

选中 Replicates 即表示可在客户端上同步此 Actor。**由于也选中了 Net Load on Client,所以地图加载时,Actor 将自动加载并在客户端机器上显示。Replicates 的用处是,如果你想在游戏期间某个时刻而非地图加载时生成 Actor,你将需要启用 Replicates 以指示当生成 Actor 时,继续操作并在客户端机器上生成复制副本。

当你在编辑器中开始游戏且打开新的客户端窗口时,你应注意到 Fire_NoReplicate 蓝图在服务器上显示,而未在客户端上显示。然而,如上所示,Fire_Replicate 蓝图同时显示在客户端和服务器上。 (服务器和客户端的运行)

4.4.2 动态创建同步的 Actor

我们将添加 Switch Has Authority(或 Authority Guard)节点以
确定由 Authority(服务器)还是 Remote 机器(客户端)执行该脚本。通常,此选项将设置为 Authority,以确保只有服务器可以执行游戏性关键脚本,如调整玩家生命值或分配分数、经验等,因为你不希望让客户端通过执行此类脚本来作弊。

在这里插入图片描述
你现在应该可以看到,由于 Switch Has Authority 设置为 Remote,所以其下的脚本仅在客户端而非服务器上执行。
例如,你拥有玩家受到伤害时可应用的某种屏幕特效,通过将 Remote 用作 Authority Guard,你可以用这种方式只在执行脚本的远程客户端上生成该特效。

你应该会看到,由于只有服务器执行了脚本,两种喷火效果都显示在服务器上,而只有设置为同步的喷火效果显示在客户端上。当你想在服务器或客户端(而非两者)上生成某物时,或更重要的是,在服务器或客户端上执行 Switch Has Authority 节点下的任何脚本时(如上所述),此操作非常有用。
在这里插入图片描述

4.4.2 在蓝图中同步变量

和Actor 以及函数 一样,变量也能通过网络复制。游戏逻辑中的关键变量应该只能在网络权威(服务器)上修改,然后根据需要复制到远程设备(客户端)上。你不应该让客户端来定义何时应该修改变量,因为这会让作弊者有机可乘(例如设置生命值、弹药量或经验值)。
你可以将变量设置成Replicated,也就是说,这个变量会生成一个该变量的一对一副本,然后该副本将从服务器复制到客户端。或者你可以使用Rep Notify变量。它拥有Replicated的所有功能,同时还提供了一个函数,每当该函数关联的变量更新时,该函数就会调用并在服务器和客户端上执行。

此处,当该蓝图生成时,我们仅在授权者(服务器)上使用 Switch Has Authority 节点调用 Set Timer 函数。我们使用此节点来确保仅由服务器而非客户端执行 Timer 函数。如果此脚本要处理游戏关键数据,们仅希望服务器执行此脚本并将任何数据复制到客户端机器上,而非由客户端执行此脚本,以防任何作弊行为。

4.4.3 在蓝图中使用远程调用函数

RPC (远程过程调用)是在本地调用但在其他机器(不同于执行调用的机器)上远程执行的函数。
RPC 函数非常有用,可允许客户端或服务器通过网络连接相互发送消息。
些功能的主要作用是执行那些不可靠的暂时性/修饰性游戏事件。这其中包括播放声音、生成粒子或产生其他临时效果 之类的事件,它们对于 Actor 的正常运作并不重要。在此之前,这些类型的事件往往要通过 Actor 属性进行复制。

远程调用函数主要包括 3 种类型: Multicast 广播、 Run on Server 在服务端执行 和 Run on owning Client 在客户端执行。
广播函数Multicast在服务器上调用和执行,然后自动转发给客户端。
服务端执行的函数Run on Server 由客户端调用,然后仅在服务器上执行。
在客户端执行的函数Run on owning Client 由服务器调用,然后仅在自有客户端上执行。

要求和注意事项

必须满足一些要求才能充分发挥 RPC 的作用:

1.它们必须从 Actor 上调用。
2.Actor 必须被复制。
3.如果 RPC 是从服务器调用(Run on Server) 并在客户端上执行,则只有实际拥有这个 Actor 的客户端才会执行函数。
4.如果 RPC 是从客户端调用(Run on owning Client )并在服务器上执行,客户端就必须拥有调用 RPC 的 Actor。
5.多播 Multicast RPC 则是个例外:

.
如果它们是从服务器调用,服务器将在本地和所有已连接的客户端上执行它们。
如果它们是从客户端调用,则只在本地而非服务器上执行。

Switch Has Authority 节点用于检查当前正在运行的脚本正在从何处执行,然后基于脚本是在网络授权者(通常为服务器)还是远程机器(客户端)上运行将其分成两个不同的方向
通常,你会对只希望在服务器上发生的事情使用授权者(这些通常为游戏关键性事件,例如调整玩家的生命值或赠送奖励或掠夺物品,因为你不想让客户端确定这些更改何时发生,以防作弊)。
在此示例中,我们将更新文本变量,此变量也完全可以是包含玩家生命值的变量,或所收集道具的变量。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:56:56  更:2022-02-22 20:57:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:35:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码