1 几种类型的角色

UE4战斗服与客户端是共享一份代码,通过以下三个类型来区分:

  • ROLE_SimulatedProxy:其他客户端在本机客户端的一个模拟代理

  • ROLE_AutonomousProxy:客户端的自己控制的角色

  • ROLE_Authority:服务器上的角色

可以通过Actor的Role 和 RemoteRole 属性来区分服务器与客户端:

  • 服务器: Role为ROLE_Authority,RemoteRole为ROLE_SimulatedProxy 或者 ROLE_AutonomousProxy

  • 客户端:Role为ROLE_SimulatedProxy 或者 ROLE_AutonomousProxy, RemoteRole为ROLE_Authority

2 几种RPC调用

  • 服务器上调用,客户端上执行的 RPC:
UFUNCTION( Client );
void ClientRPCFunction();
  • 客户端上调用,服务器上执行的 RPC:
UFUNCTION( Server );
void ServerRPCFunction();
  • 服务器调用,在服务器和当前连接的所有客户端上执行:
UFUNCTION( NetMulticast );
void MulticastRPCFunction();

多播 RPC 也可以从客户端调用,但这时就只能在本地执行。

RPC的可靠性与校验
指定Reliable关键字保证可靠性,通过 WithValidation 关键字指定校验(校验失败会断开RPC调用者的连接),需要实现_Validate与_Implementation函数:

UFUNCTION( Server, Reliable, WithValidation );
void SomeRPCFunction( int32 AddHealth );
bool SomeRPCFunction _Validate( int32 AddHealth )
{If ( AddHealth > MAX_ADD_HEALTH ){return false;                       // This will disconnect the caller}return true;                              // This will allow the RPC to be called
}void SomeRPCFunction _Implementation( int32 AddHealth )
{Health += AddHealth;
}

按照Actor的所有权进行分类,RPC的执行详情如下:

针对在客户端Actor中需要向服务器发送RPC,只有out-most owner为PlayerContrller的Actor调用才会生效,否则调用无效,只有被玩家直接操控的对象及子对象才有资格调用RPC,详见AActor::SetOwner()与AActor::GetNetConnection()。同理,服务器调用的客户端RPC,只会在out-most owner的PlayerContrller所对应的Connection的客户端执行。

// Send function data to remote.
Connection = Actor->GetNetConnection();
if (Connection)
{InternalProcessRemoteFunction( Actor, SubObject, Connection, Function, Parameters, OutParms, Stack, bIsServer );
}
else
{UE_LOG(LogNet, Warning, TEXT("UIpNetDriver::ProcessRemoteFunction: No owning connection for actor %s. Function %s will not be processed."), *Actor->GetName(), *Function->GetName());
}

3 几种同步复制

  • Actor复制
    通过Replicates属性标记Actor是否复制(C++中为bReplicates):

    NetLoadonClient属性标记地图加载时同步创建到网络客户端,Replicate Movement标记是否同步移动或位置相关属性(Actor的Replicates设置为true,该标记才能生效)。

  • 组件复制

C++设置复制:

蓝图中设置复制(静态与动态设置):

组件复制开销大,不建议使用。

  • 属性复制
    蓝图中:

    标记Replication属性,并给出复制条件:

C++中通过代码实现一样的机制:
将 replicated 关键字作为 UPROPERTY 声明的一个参数:

class ENGINE_API AActor : public UObject
{UPROPERTY( replicated )AActor * Owner;
};

实现 GetLifetimeReplicatedProps 函数:

void AActor::GetLifetimeReplicatedProps( TArray< FLifetimeProperty > & OutLifetimeProps ) const
{DOREPLIFETIME( AActor, Owner );
}

actor 的构造函数中将 bReplicates 标志设置为 true:

AActor::AActor( const class FPostConstructInitializeProperties & PCIP ) :Super( PCIP )
{ bReplicates = true;
}

4 C/S模式

UE4中的网络模型采用的是C/S模型。有两种两种服务器:

  • Listen Server:方便进行局域网本地游戏,在本地机器上搭建服务器,此时本地机器既是服务器又是客户端。

  • Dedicated Server: 更为专业的是独立服务器,在独立服务器上则不执行渲染任务,只承担服务器的相关职责。

UE4编辑器提供的基本命令行:

参考文献

[1] UE4网络连接与多人游戏

备注

完整版本迁移至UE4网络之基本概念

UE4网络基本研究一【基本概念】相关推荐

  1. 网络切片技术缺点_5G中网络切片研究的现状与挑战

    5G 中网络切片研究的现状与挑战 朱明 [期刊名称] <网络新媒体技术> [年 ( 卷 ), 期] 2018(007)001 [摘要] 5G 网络是一个支持多个不同性能和服务要求的多服务网 ...

  2. 主题网络爬虫研究综述

    0 引言 Internet 的飞速发展加快了网络信息量增长.在互联网这个庞大的资源库中, 网页搜索引擎是人们获取外界信息的主要工具.为了提 高检索质量,达到更好的检索体验,通用搜索引擎应运而生.通用搜 ...

  3. 网络中的一些基本概念

    为了更好的促进互联网的研究和发展,国际标准化组织ISO在1985年制定了网络互连模型 OSI参考模型(国际标准),具有7层结构 实际应用中得到认可TCP/IP协议 请求过程 网络中的一些基本概念 MA ...

  4. UE4 网络同步Replicate 汇总

    一. 官方说明: https://wiki.unrealengine.com/Replication 二. UE4网络模块分析 https://www.jianshu.com/p/b4f1a5412c ...

  5. 无线传感器网络与自组织网络的研究现状

    A Survey on Wireless Sensor Network and Ad Hoc Network 盛敏,田野,李建东 摘 要:传感器网络综合了传感器技术.嵌入式计算技术.分布式信息处理技术 ...

  6. 《网络科学导论》学习笔记——代表性网络的研究内容

    写在前面 从2012年开始接触复杂网络系统,本科毕业设计读了汪小帆老师的<复杂网络理论及其应用>,对整体有了一定把握:如今工作再读<网络科学导论>,觉得较前一本在广度.深度上都 ...

  7. 中国银联与上海银行基于SDN的下一代金融云网络联合研究与应用实践:从分层分区传统架构向云网架构转型...

    本文作者: 上海银行 马永祥等 中国银联 祖立军等 0.引言 中国银联与上海银行就金融云与SDN技术研究等达成合作,其中中国银联的电子商务与电子支付国家工程实验室与上海银行数据中心以下一代金融云数据中 ...

  8. 《中国人工智能学会通讯》——第3章 3.1基于深度学习的网络表示研究进展

    第3章 3.1基于深度学习的网络表示研究进展 网络结构在现实世界中无处不在(如航线网络.通信网络.论文引用网络.世界万维网和社交网络等),在此基础之上的应用和研究问题受到了学术界和工业界的广泛关注,这 ...

  9. 代谢组学数据分析及网络药理学研究技术与实践

    一.代谢组学研究技术与实践 1.代谢组学简介及样本的采集与制备关键问题探讨 1.1 代谢组学概述 1.2 代谢组学操作流程 1.3 样本的采集.储存与制备关键问题 2.代谢组学数据采集与预处理,决定数 ...

最新文章

  1. 【Java小工匠聊密码学】-密码学--综述
  2. 可视化Linux性能监控
  3. OpenCV ChArUco角的检测
  4. UDP(socket)接和数据案例封装成C++代码
  5. 对KVM虚拟机进行cpu pinning配置的方法
  6. 火爆全网的迁移学习简明手册全面更新,重磅出版上市!
  7. 第十篇学会编写python代码_Python 强化训练:第十篇
  8. pandas 表操作
  9. 实数在java中的表示,java - 如何在Z3(Java)中从模型中获取实数值作为小数(双精度)? - SO中文参考 - www.soinside.com...
  10. 小学计算机专业说课稿模板,小学信息技术计算机的小管家说课稿
  11. 《零秒工作》的一些总结
  12. 数组根据某个条件筛选出符合的数据,生成一个新的数组
  13. 如果你用过这些电子产品 证明你老了
  14. iPhone 13 真的要来了!苹果秋季发布会前瞻
  15. 物联网连接拼图:蜂窝与非蜂窝
  16. Evernote和印象笔记的注册问题
  17. AutoCAD Civil3D 2023安装图文教程及下载
  18. Spring监听器的完整使用步骤
  19. ZCloud-搭建开发环境
  20. 【强化学习】Q-Learning算法详解以及Python实现【80行代码】

热门文章

  1. 南京中医药大学经贸管理学院POCIB大赛表彰暨动员大会
  2. Java 加解密工具类
  3. java tcp 获取状态_TCP连接状态
  4. Oracle:trunc()函数简介
  5. 博观人脸算法工作记录
  6. Python多关键字排序(思路清晰)
  7. golang定义空指针_Go语言指针声明及操作方法
  8. Linux中实现水仙花数的输出
  9. 软考高级常见英语词汇
  10. 彩色图像、灰度图像、索引图像和二值图像的区别