2:虚幻引擎网络架构:Replication

  虚幻引擎的网络架构主要功能即是通过Replication Actor,Variable, function来保持服务器和客户端的信息同步。Unreal的每一个类都有一个复制语句Replication{}。这个块中可以进行变量和函数的复制。

这是在PlayerReplication中的复制语句

Replication
{
    //服务器应该发送到客户断的数据。
    if ( bNetDirty && ( Role == Role_Authority ) )
        Score, Deaths, bHasFlag, PlayerLocationHint,
        PlayerName, Team, TeamID, bIsFemale, bAdmin,
        bIsSpectator, bOnlySpectator, bWaitingPlayer, bReadyToPlay,
        StartTime, bOutOfLives, UniqueId;
    if ( bNetDirty && ( Role == Role_Authority ) && !bNetOwner )
        PacketLoss, Ping;
    if ( bNetInitial && ( Role == Role_Authority ) )
        PlayerID, bBot;
}

  在上面代码中:   -bNetDirty表示variable中有值发生了变化才会进行复制。       -bNetInitial应该总是为true。      -如果Actor的Owner是当前客户端的PlayerController则为true。

  上面的Replication模块定义了这个Actor中可以从服务器端发送给客户端同步的数据,这样可以只挑选很少的一部分进行传输节省了大量的带宽。还可以把Network编程的部分从代码中剥离出来看。

  1.变量复制  一般是变量被服务器发送给客户端,但也存在少数从客户端将数据返给服务器端的情况发生。对于从客户端复制到服务器的情况,这个操作必须是在客户端的PlayerController中完成!  变量复制总是在每次更新的最后执行,并且是Reliable。

    2.函数复制  尽管在单人游戏中将总是执行每一个function,但在网络游戏中可不一定是。例如脚底下Buff粒子播放的函数可以只需要给自己看见,而其他玩家不需要看到。因为函数复制和变量赋值先后顺序的问题,你得考虑复制的函数中包含那个要被复制的变量改变,可以将其当做这个函数的参数一并复制哦。  函数复制可以有Unreliable,

  3.仿真

  在服务器上每一个函数都会被执行,除非是从客户端发送来的。在客户端上,每一个函数都有一个起源,要么是从服务器 到 客户端的复制函数,事件函数或exec 函数。  对于Simulated函数,是为了给客户端支持接近Actor实际运行效果的函数,同时被Server和Client调用。考虑到一个Projectile撞击墙壁,这个函数可被设为Simulated,因为Client可以预测这个事件的发生。这会减少不必要的从服务器复制给客户端的网络传输延迟。大多的PostBeginPlay也是这个情况,在客户端的Actor会初始化料理好自己。

 

  关于优化和提高性能:  对于网络设计,我们总是想以为玩家提高低延迟的游戏服务为宗旨的,所以在做网络编程时应该注意一下几个原则和内容:  - 最少化复制Actors的数量  - 最小化每次Actors在tick时的更新:将Relevancy的Actor数量尽量降到最低(下节讲Relevancy)  - 避免不必要的bNetDirty

  - 避免不必要在服务器端的Actor Spawn,例如爆血粒子,让服务器端的玩家看到即可。  - 避免一些游戏性不相关的Relevancy,(好吧,这里还是讲Relevancy,就是说有时候一些Actor离你很远不会处于摄像机内,并影响到你。这时候你就不需要给这些Actor进行网络同步耗费带宽)  - exec function的数量尽可能降到最低  - 总之保持以下原则:1.保持每一个Client的Relevant Acto数量最小  - 减少每次更新的属性数量  - 减少传输包的数量

  解压DevNetTraffic查看所有复制Actor的属性记录。Stat Net来查看对应的网络状况信息。

  
时间: 2024-11-13 08:07:12

2:虚幻引擎网络架构:Replication的相关文章

1:虚幻引擎网络架构:Actors

终于有时间了,打算在这个周末认认真真的研究虚幻引擎网络架构,同时我在Safaribooksonline上面发现了一本能让我的生活变得轻松的书Multiplayer Game Programming by Rough Cuts,这个周末好好享用哟.  好了,承接上一次的内容:为什么虚幻引擎的网络架构这么的高效? 1.从他的架构模式继续广义的客户端-服务器模型(Generalized Client-Server model): 在这个模型中服务器还是控制着游戏状态的变化,客户端运行着和服务器一样的代

4:虚幻引擎网络架构:技术要点总结篇

Replication要点 1.simulated function  在网络环境中只有exec,client , simulated 函数才在客户端进行调用.如果一个函数没有任何前缀,它只会在Server中进行调用. 另外,对于一个simulated function,他要么是被另外一个simulated function 调用,要么就是在native函数中被调用才能在客户端执行.   应用举例 simulated function PostBeginPlay() { `log("PostBe

3:虚幻引擎网络架构:GameInfo,PlayerMove

1.GameInfo和Network初始化 在一个单独类中是使用WorldInfo.Game来获取当前的游戏类型的,在客户端是没有GameInfo,即WorldInfo.Game=none.而只有服务器端才会具有,因为只有服务器端规定了游戏规则. 在游戏启动的时候,GameInfo会进行以下序列: - event InitGame(string options,out string ErrorMessage),即服务器启动游戏时调用这个函数,解析URL选项,如 Unreal.exe MyLeve

大象无形_虚幻引擎程序设计浅析pdf

下载地址:网盘下载 <大象无形:虚幻引擎程序设计浅析>以两位作者本人在使用虚幻引擎过程中的实际经历为参考,包括三大部分:使用C++语言进行游戏性编程.了解虚幻引擎本身底层结构与渲染结构.编写插件扩展虚幻引擎.提供了不同于官方文档内容的虚幻引擎相关细节和有效实践.有助于读者一窥虚幻引擎本身设计的精妙之处,并能学习到定制虚幻引擎所需的基础知识,实现对其的按需定制. <大象无形:虚幻引擎程序设计浅析>适合初步了解虚幻引擎编程,希望了解虚幻引擎本身架构或者希望定制和扩展虚幻引擎的读者. 作

(转载)虚幻引擎3--UnrealScript语言参考

档概要: UnrealScript 介绍和简要参考.最初作者是Tim Sweeney (EpicGames) 内容 UnrealScript语言参考 介绍 快速链接 本文档的目的 UnrealScript的设计目标 虚幻引擎3中UnrealScript的新功能 代码结构示例 Unreal虚拟机 对象层次 类 变量 变量类型 内置类型 集合数据类型 Unreal类型 变量修饰符 可编辑性 数组 Structs 修饰符 枚举 常量 Object和actor引用变量 类引用变量 表达式 赋值 在类之间

(转载)虚幻引擎3--12掌握虚幻技术UnrealScript 代理

第十二章- DELEGATES(代理) 12.1 –概述 12.2 - 声明代理(Delegate) 代理参数 默认行为 12.3 - 代理变量 12.4 - 传递Delegate(代理)给函数 12.5 - 代理和内存 12.6 -       UISCENE 和 UIOBJECT       DELEGATES(代理) UISCENE 代理 UIOBJECT 的代理 12.7 – 虚幻引擎3和虚幻竞技场3中的其它代理 AUDIOCOMPONENT GAMEINFO GAMEVIEWPORTC

(转载)虚幻引擎3--基础知识

这是虚幻引擎3UDN的技术文档,共有六个章节.以下将分别把中文译本贴出来,方便懒人学习[偷笑]  一.虚幻引擎 3 基础知识 概述 -------------------------------------------------------------------- 有几个游戏性元素实际上是所有使用虚幻引擎3或虚幻开发工具包创建的项目所共有的.自定义这些元素可以创建出完全独特的.外观和行为符合期望的游戏.没有任何两个项目是相同的,尽管虚幻引擎提供了这些元素的默认实现,但是肯定需要对它们进行很大

虚幻引擎 4 14 版发布

Share on Facebook Share on Twitter Share on Google+ Share on LinkedIn 此版包含 Epic 的数百项更新,以及 GitHub 虚幻引擎开发者社区提交的 71 项改良!特此对虚幻引擎 4.14 版本的每位贡献者表达诚挚谢意: Adam Moss(adamnv).Alan Edwardesa(alanedwardes).Andreas Axelsson (judgeaxl).Andreas Schultes(andreasschul

网络架构、云平台和微信公众平台开发接入

版权声明:本文为博主原创文章,未经博主允许不得转载. 云与后端相关的技术似乎并不属于嵌入式和物联智能硬件开发工程师的范畴,但是嵌入式开发工程师有必要认识成熟的网络架构和相关的云技术,以拓展自己在系统架构方面的视野.大数据分析是物联网背后的核心价值,物联智能硬件是物联大系统的终端,开发工程师不仅要深入精通物联技术,也应该去理解大系统,甚至整个生态领域的相关技术. 作为嵌入式开发工程师,也许并不需要熟悉云和后端的技术开发,但至少要对其中用到的技术和接口有一定的认识. 一.网络架构 常见的网络架构分为