当前位置: 首页 > news >正文

【UE 网络】RPC远程过程调用 入门篇

目录

  • 0 引言
  • 1 RPC基本概念
    • 1.1 定义
    • 1.2 分类
  • 2 RPC的使用
    • 2.1 Client RPC
    • 2.2 Server RPC
    • 2.3 Multicast RPC

请添加图片描述

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

0 引言

RPC是UE进行网路同步的一种关键方法
官方文档

1 RPC基本概念

1.1 定义

RPC (远程过程调用)是在本地调用但在其他机器(不同于执行调用的机器)上远程执行的函数。

RPC 函数非常有用,可允许客户端或服务器通过网络连接相互发送消息。

这些功能的主要作用是执行那些不可靠的暂时性/修饰性游戏事件。这其中包括播放声音、生成粒子或产生其他临时效果 之类的事件,它们对于 Actor 的正常运作并不重要。在此之前,这些类型的事件往往要通过 Actor 属性进行复制。

1.2 分类

UE中的RPC主要分为三种类型:服务器RPC、客户端RPC和多播RPC。每种类型的RPC都有其特定的用途和调用方式。

2 RPC的使用

使用前确保开启了Actor复制的功能,这是使用一起网络通信功能的前提。

AMyCharacter::AMyCharacter()
{bReplicates = true;
}

2.1 Client RPC

客户端RPC用于从服务器向特定客户端发送请求。通常用于服务器通知客户端执行某些操作,例如更新UI、播放动画等。

定义

UFUNCTION(Client, Reliable)
void ClientFunction();
  • Client:标识这是一个客户端RPC。
  • Reliable:标识这个RPC是可靠的,确保消息会被传递。

示例

MyCharacter.h

UFUNCTION(Client, Reliable)
void ClientDoSomething();

MyCharacter.cpp

void AMyCharacter::ClientDoSomething_Implementation()
{// 客户端执行的逻辑
}

在服务器调用客户端RPC:

if (HasAuthority())
{ClientDoSomething();
}

2.2 Server RPC

服务器RPC用于从客户端向服务器发送请求。通常用于客户端请求服务器执行某些操作,例如处理玩家输入、请求数据等。

定义

UFUNCTION(Server, Reliable, WithValidation)
void ServerFunction();
  • Server:标识这是一个服务器RPC。
  • Reliable:标识这个RPC是可靠的,确保消息会被传递。
  • WithValidation:标识这个RPC需要验证函数。

示例

MyCharacter.h

UFUNCTION(Server, Reliable, WithValidation)
void ServerDoSomething();

MyCharacter.cpp

void AMyCharacter::ServerDoSomething_Implementation()
{// 服务器端执行的逻辑
}
bool AMyCharacter::ServerDoSomething_Validate()
{// 验证逻辑(通常用于防止作弊)return true;
}

在客户端调用服务器RPC:

if (IsLocallyControlled())
{ServerDoSomething();
}

2.3 Multicast RPC

多播RPC用于从服务器向所有客户端发送请求。通常用于广播事件,例如游戏状态更新、全局通知等。

定义

UFUNCTION(NetMulticast, Reliable)
void MulticastFunction();
  • NetMulticast:标识这是一个多播RPC。
  • Reliable:标识这个RPC是可靠的,确保消息会被传递。

示例

MyCharacter.h

UFUNCTION(NetMulticast, Reliable)
void MulticastDoSomething();

MyCharacter.cpp

void AMyCharacter::MulticastDoSomething_Implementation()
{// 所有客户端执行的逻辑
}

在服务器调用多播RPC:

if (HasAuthority())
{MulticastDoSomething();
}
http://www.lryc.cn/news/387617.html

相关文章:

  • 安装maven与nexus
  • 如何用DCA1000持续采集雷达数据
  • 怎么用JavaScript写爬虫
  • Leetcode 3203. Find Minimum Diameter After Merging Two Trees
  • 【抽代复习笔记】24-群(十八):循环群的两道例题
  • Linux常见操作问题
  • 鲁工小装载机-前后桥传动轴油封更换记录
  • 商城自动化测试实战 —— 登录+滑块验证
  • 8.计算机视觉—增广和迁移
  • 【Matlab】-- BP反向传播算法
  • 【Python】 数据分析中的常见统计量:众数
  • Karabiner-Elements 设置mac键盘
  • Mybatis实现流程
  • 简单的springboot整合activiti5-serviceImpl部分(1)
  • snat、dnat和firewalld
  • [数据集][目标检测]鸡蛋缺陷检测数据集VOC+YOLO格式2918张2类别
  • 前后端防重复提交
  • JVM专题八:JVM如何判断可回收对象
  • binary_cross_entropy_with_logits函数的参数设定
  • Python 面试【★★★★★】
  • C# StringBuilder
  • 4个文章生成器免费版分享,让文章创作更轻松便捷
  • redis-cluster(集群模式搭建)
  • 使用vite官网和vue3官网分别都可以创建vue3项目
  • PDF处理篇:如何调整 PDF 图像的大小
  • STM32 HAL库里 串口中断回调函数是在怎么被调用的?
  • 音视频入门基础:H.264专题(5)——FFmpeg源码中 解析NALU Header的函数分析
  • RT-Thread ENV-Windows v2.0.0安装教程
  • [HBM] HBM TSV (Through Silicon Via) 结构与工艺
  • 基于STM32的温湿度检测TFT屏幕proteus恒温控制仿真系统