Unreal Engine 网络系统(四):UEC++的RPC

目录

行为同步

On Server:服务端的RPC代码

On Client:客户端的RPC代码

NetMulticast:广播的RPC代码

属性同步


行为同步

借助UFUNCTION进行函数标记

  • UFUNCTION(Server):声明一个在客户端调用,在服务端执行的函数
  • UFUNCTION(Client):声明一个在服务端调用,在客户端执行的函数
  • UFUNCTION(Server):声明一个在服务端调用,在所有终端执行的函数

注:RPC通信函不能有返回值

On Server:服务端的RPC代码

  • UFUNCTION中有三个参数:Server,WithValidation ,Reliable
    • Server:上一节已经说了
    • WithValidation:验证
    • Reliable:可靠传输,保证消息传递到Client(TCP)
  • RPC函数,有三种:
    • 本体:调用
    • 本体_Implementation:执行
    • 本体_Validate:验证逻辑
      • 返回true或false,false表示Client作弊,直接踢掉

On Client:客户端的RPC代码

  • 原理与Server所述类似
  • Client端不需要Validate(验证) 

NetMulticast:广播的RPC代码

  • 原理与Server所述类似
  • Client端不需要Validate(验证) 

属性同步

参数(属性)同步需要将参数注册到复制参数列表,借助UPROPERTY()宏进行标记,并且参数同步操作必须在服务端进行修正,客户端直接修改无法达到目的。

  • UPROPERTY(Replicated):标记参数为复制参数
  • UPROPERTY(ReplicatedUsing=函数名):标记参数为复制参数,复制操作会回调函数,函数需要使用UFUNCTION标记(向除Server外所有终端进行通知,必须满足相关性
  • 标记完成后需要绑定到复制参数列表
    • 所有需要同步的参数都需要绑定到复制参数列表,以便引擎可以方便进行管理
    • 绑定需要实现函数GetLifetimeReplicatedProps,并使用宏DOREPLIFETIME进行注册
    • C++里需要手动回调,而蓝图里自动回调

属性同步复制条件

  • COND_InitialOnly:该属性仅在初始数据组尝试发送
  • COND_OwnerOnly:该属性仅发送至actor的所有者
  • COND_SkipOwner:该属性将发送至除所有者之外的每个连接
  • COND_SimulatedOnly:该属性仅发送至模拟Actor
  • COND_AutonomousOnly:该属性仅发送至自主Actor
  • COND_SimulatedOrPhysics:该属性将发送至模拟或bRepPhysics actor
  • COND_InitialOrOwner:该属性将发送初始数据包,或者发送至actor所有者
  • COND_Custom:该属性没有特定条件,但需要通过SetCustomIsActiveOverride 得到开启/关闭能力(如果没有特殊需求少自定义)

属性复制条件可以使得程序员对复制属性的方式和时机进行精细控制

总结:

  • 对象Actor必须开启网络复制,其属性才能够完成同步
  • 同步中,如果属性变化需要得到通知,尽量不要使用轮询的方式更新,应使用通知方式
  • 同步属性应该在Server完成,禁止在Client操作(不会同步 )
  • 通常同步数据类型需要使用UE的Gameplay为基础的变量
  • 当属性类型为Actor,注意Actor复制引用的相关操作

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试老鸟都在用的接口抓包常用工具以及接口测试工具都有哪些?

目录 接口 接口测试的重要性 常用抓包工具 常用接口测试工具 接口 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间…

pkg打包node项目到linux中运行

首先看一下pkg的一些基本操作 pkg打包node项目为exe_node静态项目 导出exe_疆~的博客-CSDN博客由于win7最高只支持node13.14.0,而pkg不支持node13,为了既兼容win7,又能使用pkg打包,故使用node12.22.11。新建node_global和node_ca…

这一次,吃了Redis的亏,也败给了GPT

关注【离心计划】,一起离开地球表面 背景 组内有一个系统中有一个延迟任务的需求,关于延迟任务常见的做法有时间轮、延迟MQ还有Redis Zset等方案,关于时间轮,这边小苏有一个大学时候做的demo: https://github.com/JA…

好用的5款国产低代码平台介绍

一、云程低代码平台 云程低代码平台是一款基于springboot、vue.js技术的企业级低代码开发平台,平台采用模型驱动、高低码融合、开放扩展等设计理念,基于业务建模、流程建模、表单建模、报表建模、大屏建模等可视化建模工具,通过拖拉拽零代码方…

安装flume

flume最主要的作用就是实时读取服务器本地磁盘的数据,将数据写入到hdfs中架构:开始安装一,上传压缩包,解压并更名解压:[rootsiwen install]# tar -zxf apache-flume-1.9.0-bin.tar.gz -C ../soft/[rootsiwen install]#…

太强了,英伟达面对ChatGPT还有这一招...

大家好,我是 Jack。 今年可谓是 AI 元年,ChatGPT、AIGC、VITS 都火了一波。 我也先后发布了这几期视频: 这是一个大模型的时代,AI 能在文本、图像、音频等领域大放异彩,得益于大模型。而想要预训练大模型&#xff0c…

nodejs篇 express(1)

文章目录前言express介绍安装RESTful接口规范express的简单使用一个最简单的服务器,仅仅只需要几行代码便可以实现。restful规范的五种接口类型请求信息req的获取响应信息res的设置中间件的使用自定义中间件解决跨域nodejs相关其它内容前言 express作为nodejs必学的…

前缀树(字典树/Trie) -----Java实现

目录 一.前缀树 1.什么是前缀树 2.前缀树的举例 二.前缀树的实现 1.前缀树的数据结构 1.插入字符串 2.查找字符串 3.查找前缀 三.词典中最长的单词 1.题目描述 2.问题分析 3.代码实现 一.前缀树 1.什么是前缀树 字典树(Trie树)是一种树形…

机器学习——无监督学习

机器学习的分类一般分为下面几种类别:监督学习( supervised Learning )无监督学习( Unsupervised Learning )强化学习( Reinforcement Learning,增强学习)半监督学习( Semi-supervised Learning )深度学习(Deep Learning)Python Scikit-learn. http: // …

用Pytorch构建一个喵咪识别模型

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 目录 一、前言 二、问题阐述及理论流程 2.1问题阐述 2.2猫咪图片识别原理 三、用PyTorch 实现 3.1PyTorch介绍 3.2PyTorch 构建模型的五要素 3.3PyTorch 实现的步骤 3.3.…

app自动化测试——app自动化控制、常见控件定位方法

文章目录一、app自动化控制1、清理数据:2、启动:3、关闭:二、常见控件定位方法1、android知识2、ios 基础知识3、元素定位4、控件基础知识5、app dom 结构解析6、iOS 与 Android dom 结构的区别7、定位方法测试步骤三要素定位方式&#xff1a…

大环境不好,找工作太难?三面阿里,幸好做足了准备,已拿offer

三面大概九十分钟,问的东西很全面,需要做充足准备,就是除了概念以外问的有点懵逼了(呜呜呜)。回来之后把这些题目做了一个分类并整理出答案(强迫症的我狂补知识)分为软件测试基础、Python自动化…

超专业解析!10分钟带你搞懂Linux中直接I/O原理

我们先看一张图: 这张图大体上描述了 Linux 系统上,应用程序对磁盘上的文件进行读写时,从上到下经历了哪些事情。 这篇文章就以这张图为基础,介绍 Linux 在 I/O 上做了哪些事情。 文件系统 什么是文件系统 文件系统&#xff0…

docker版jxTMS使用指南:数据查询

本文讲解docker版jxTMS的数据查询,整个系列的文章请查看:docker版jxTMS使用指南 请按前文所述先做好相关的准备工作,然后多在helloWorld界面输入各种数据后点【点我】按钮,以多创建点数据来为查询做下准备。 分页查询 首先在we…

python网上选课系统django-PyCharm

学生选课信息管理系统,可以有效的对学生选课信息、学生个人信息、教师个人信息等等进行管理。 开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat11 开发软件&#x…

RK3588平台开发系列讲解(NPU篇)NPU调试方法

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、日志等级二、NPU 支持查询设置项沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们一起来看一下NPU的调试方法。 一、日志等级 NPU 的运行库会根据开发板上的系统环境变量输出一些日志信息或者生成…

操作系统(2.4.5)--管程机制

1.管程的定义 利用共享数据结构抽象地表示系统中的共享资源,而把对该共享数据结构实施的操作定义为一组过程进程对共享资源的申请、释放和其它操作,都是通过这组过程对共享数据结构的操作来实现的,这组过程还可以根据资源的情况,或…

yolov8训练筷子点数数据集

序言 yolov8发布这么久了,一直没有机会尝试一下,今天用之前自己制作的筷子点数数据集进行训练,并且记录一下使用过程以及一些常见的操作方式,供以后翻阅。 一、环境准备 yolov8的训练相对于之前的yolov5简单了很多,…

【链表OJ题(九)】环形链表延伸问题以及相关OJ题

环形链表OJ题 1. 环形链表 链接:141. 环形链表 描述: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环&…

简单分析Linux内核基础篇——initcall

写过Linux驱动的人都知道module_init宏,因为它声明了一个驱动的入口函数。 除了module_init宏,你会发现在Linux内核中有许多的驱动并没有使用module_init宏来声明入口函数,而是看到了许多诸如以下的声明: static int __init qco…