UE4虚幻引擎4多人联机基础知识和客户端服务器通信机制详解

原创文章,转载请注明出处:https://blog.csdn.net/weixin_37864449/article/details/89096536

先上一张镇楼图:

一:UE4两种联机方式

ue4有两种联机方式,一种是局域网联机,另外一种是外网联机,需要有独立的服务器。但是无论是何种联机方式,都是只有一个服务器端,区别在于局域网联机中客户端和服务器端都同在CreateSession那台机器上,其他joinSessiion的为客户端,独立服务器的顾名思义客户端和服务器端是相互独立的。

 

二:联机之前需要了解的蓝图类

1.playerController类,键盘,鼠标等外界输入事件的发生都是由playerController这个类调用的,另外服务器端要找到特定的客户端只能通过playerController,上图的一对一映射关系说明了这一点,客户端找到服务器端通过下面即将说到的RPC远程调用方式实现。

2.gameMode类,gameMode类只存在于服务器端,即联机运行时gameMode类写的事件逻辑只在服务器端运行,控制整个游戏运行规则和流程。

3.playerState类,playerState相当于白皮书,,在worldSetting的gameMode属性中指定当前关卡的playerState类,游戏运行时白皮书会分发(实例化)到各个pawn中,也就是说各个pawn拿到的白皮书的内容(类中的属性变量等)是一样的,所以playerState适合于记录所有pawn都共有的属性或方法,如果指定了playerState类replicates属性为true,那么只要服务器端某pawn改变了自身的playerState属性,那么所有客户端中这个pawn的playerState中该属性都被改变了,当然replicates属性不仅存在于playerState中,playerController,actor,pawn,character类都有replicates属性,也就是说在类层面上设置replicates属性为true,那么服务器端一但产生这个类实例,所有客户端也能看到这个类的实例,除此之外这些类成员变量也有replicates属性,当设置为true时,只要服务器端改变这个成员变量取值,所有客户端该成员变量取值也会随之被改变,但在客户端改变成员变量取值,并不会自动对服务器或其他客户端该成员变量取值产生任何影响,如果想产生影响,需要用户手动通过RPC来同步这种改变。

4.gameInstance类,这个类存在于客户端和服务器端中,生命周期自游戏创建以来就一直存在,但没有同步机制,即改变服务器端gameinstance某个成员变量取值不会对客户端的有任何影响。

ps:上面说到的playerController,gameMode,playerState类都要在关卡worldSetting中GameMode栏设置,因为他们的生命周期仅存在关卡中,gameInstance类需要在Edit->Project Setting...->Maps&Modes中最下面的gameinstance栏设定。

关系图:

ps:这里的是否可复制表示服务器端的变化是否会复制到所有客户端,生命周期指的是不同生命周期类可以不一样,对于生命周期为关卡的类指定在每个关卡worldsetting中的gamemode栏设置。

三:联机流程

客户端一但joinSession到指定的服务器中,就会触发服务器端gameMode类中的eventOnPostLogin事件,eventOnPostLogin事件会实例化一个playerController类输出,该类和登录到服务器的那个客户端相对应(即映射),注意,这里实例化的一个playerController和对应登录的客户端的playerController不是同一个东西,即改变客户端的playerController某个成员变量取值再登录,服务器端实例的playerController该成员变量并不会受到影响,还是类定义时playerController中该成员变量取的默认值,因为是重新按类模板实例化后再和客户端对应起来的,这个playerController只能看到客户端登录后遗留在服务器端的占位符,借此与客户端的playerController建立连接。服务器端实例化后这个playerController是不会保存在引擎中的,所以需要在gameMode中定义一个playerController数组变量,每eventOnPostLogin一次就将输出的playerController加到数组变量中,以后就可以通过服务器端的playerController来和对应客户端的playerController通信了,反之也行。

四:通信机制

ue4最常用的客户端与服务器端或服务器端与客户端的通信是通过RPC(Remote Procedure Call)机制进行的,分三种通信方式:

  1. 客户端调用运行在服务器端的自定义事件(事件replicates属性设置为runOnServer)从而与服务器端通信
  2. 服务器端调用运行在指定客户端的自定义事件(事件replicates属性设置为runOnOwningClient)与客户端通信
  3. 服务器端调用广播自定义事件(事件replicates属性设置为multicast)和所有客户端通信

ps:可见客户端与客户端通信必须经过服务器端!!

  • 所以以后所说的在客户端运行是指客户端playerController控制的对象逻辑或在服务器端定义的replicates属性为runOnOwningClient或multicast事件或客户端playerController中处理的逻辑过程
  • 以下所说的在服务器端运行是客户端定义了一个replicates属性为runOnServer的事件或是在gameMode类中或服务器端的playerController中处理的逻辑过程

4.1 服务器端playerController和对应客户端的playerController相互通信:

首先在服务器端的playerController类中自定义一个事件,事件replicates属性设置为runOnOwningClient,因为服务器端playerController是和客户端的playerController一 一对应的,所以事件触发时它是知道应该在哪个客户端运行的,注意事件的触发运行是不能人为干预的,即只要服务器端一调用,相应的客户端就会自动触发该事件执行,事件定义好后应该在服务器端调用。同理客户端和服务器端通信时可以在客户端playerControler中自定义一个replicates属性为runOnServer的事件,然后调用该事件,这样该事件会在和客户端对应的服务器端的playerController中触发执行。

ps:事件replicates属性设置为runOnServer的事件及其调用

ps:事件replicates属性设置为runOnOwningClient的事件及其调用

4.2 客户端pawn和服务器端pawn相互通信。(当然不一定是pawn,actor类,character类也可以,这里以pawn来举例)

介绍通信之前首先介绍pawn产生机制,pawn可以通过spawnActorFromClass产生,pawn如果replicate属性设置为true,那么在服务器端产生一个pawn,相应的所有客户端也会产生这个pawn。另外如果playerController类中replicate属性设置为true,那么只要服务器端playerController调用Possess绑定一个pawn,那么和服务器端playerController对应的客户端playerController也会绑定这个pawn,所以pawn的产生和控制器的绑定只要在服务器端完成即可,如可在gameMode类中进行这些操作,或在客户端的playerController中自定义的replicate属性为runOnServer的事件中进行这些操作,那么就可以同步到所有客户端。

下面正式介绍客户端pawn和服务器端pawn的相互通信。和4.1所说的方式同理,都是RPC通信的过程,区别在于多了一个replicate属性为multicast即多播的自定义事件类型,少了一个属性为runOnOwningClient的自定义事件,因为服务器端产生n个pawn,那么每个客户端都会得到这n个pawn的副本,见最上面的镇楼图。所以服务器中某个pawn并不和某个客户端的pawn存在映射关系,而是和所有客户端该pawn都存在映射,通过多播自定义事件可以当服务器端pawn某个属性改变时及时同步所有客户端中这个pawn改变相关属性。

在pawn中定义的multicast属性事件:

在gamemode中调用该事件:

当然也可以在客户端定义的Replicate属性为runOnServer的自定义事件中调用replicate属性为multicast的自定义事件,因为上面红色字体第二点中说明了这均代表在服务器上运行。

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「虚幻引擎5」为何让开发者们拍手叫好?它到底厉害在哪?

Epic 在昨天公布其最新次世代引擎「虚幻引擎5」,并重点介绍了新引擎的两项新技术 Nanite 和 Lumen。下面给大家简单介绍一下这两个新技术到底厉害在哪里,以及为什么许多游戏开发者们看完之后纷纷拍手叫好。 首先,整段 Demo 采用动态分辨率&…

虚幻引擎5新手使用方法(1)

首先先下载Epic,注册完账号,点击虚幻引擎,点击右上角下载耐心等待。 安装完成如下图 点击启动 等待加载完成 进入这个界面选择你喜欢的类别,这里我们用游戏的第三人称游戏举例 选择第三人称游戏 在右下角选择蓝图 ,选…

ue5,ue4(虚幻5)安卓触摸

这个是单方向的,如果要用双方向的,就是 x和y同时运用的话建议用向量2d(变量),把它分割成x和y就可以了,我门平时在网上见到的触摸都是:按下到连续,我这个方法是按下-连续-停止&#x…

最新虚幻5引擎(UE5)游戏性能的影响详解

Unreal Engine 5 是由 Unreal Engine 公司开发的一款游戏引擎。5 代表引擎的主要版本号。它专为创建多人在线游戏、手机游戏、高端游戏和虚幻应用程序而设计。 从图中可以看出,随着场景复杂度的增加,UE5的内存占用会逐渐增加。当然,这并不意味…

承包了我今日笑点的AI“文心一言”,被质疑是“套壳”?

如今,AI产品属实是位于风口浪尖,火的不行,在国外AI产品GPT4公布的第二天,我们熟悉的百度公司就推出了他们家的AI产品“文心一言”。 在百度的发布会中,总裁李彦宏亲自在视频中做出了相应的展示,包括使用文心…

给ChatGLM2注入知识;阅文集团发布首个网文大模型“阅文妙笔”

🦉 AI新闻 🚀 阅文集团发布首个网文大模型“阅文妙笔” 摘要:在阅文创作大会上,阅文集团发布了国内首个网文大模型“阅文妙笔”。该模型以AIGC为创作生态和IP生态赋能,将为作家带来创作模式的创新和新的价值。侯晓楠…

1本超强的AIGC工具书!ChatGPT+30多个实用工具随便玩!

2023年5月16日,在《收获》杂志65周年庆典上,莫言说他想给余华准备颁奖词,但准备了几天也没想出来,最后,他在ChatGPT上输入“活着”“拔牙”“文城”等关键词,瞬间生成1000多字的颁奖词,并且还是…

足坛名帅巡礼之杰拉德

点击返回博客主目录 点击返回“欢迎来到足球世界” ​一、英超生涯正式开启 这是杰拉德在苏超证明了自己之后,开始迈入英超的大舞台去真正的展示自己的执教水平!! 1.阿斯顿维拉 1-3 切尔西 因为杰拉德在新冠病毒检测呈阳性后需要隔离&#…

c罗说什么语言,世界足坛:语言不通,怎能仗剑天涯

足球运动如今在我们这个星球上的各个角落蓬勃发展,已经成为一项越来越全球化的运动,把世界各地紧密连接在一起,这就意味着球员和教练必须学会更多的语言来行走江湖。而事实上,有许多人在这方面走得更远,掌握了5-6种不同…

足坛名帅巡礼之郎尼克

点击返回博客主目录 点击返回“欢迎来到足球世界” 一、2011赛季名帅郎尼克中途接手红魔 其实郎尼克在朗尼克已经在11月22日抵达英格兰,接受新冠检测之后,他必须在得到阴性的检测结果之前进行隔离。由于延迟拿到工作证,朗尼克可能需要等到12…

足坛名帅巡礼之哈维

点击返回博客主目录 点击返回“欢迎来到足球世界” 一、名帅生涯正式开启(2011赛季入主巴萨) 2021年11月6日,巴萨官网正式官宣哈维称为巴塞罗那俱乐部正式主帅。 2021年11月8日,哈维正式亮相诺坎普球场 1.巴塞罗那 1-0 西班牙人 …

足坛最火红人VS三国神将,谁会胜?

张飞武艺高强,勇猛过人,作战能力强,是刘备手下的一把利器,但是他性格过于暴躁,自控能力较差。与张飞有着相似之处的足球明星是科斯塔,因为他是切尔西足球俱乐部的一把利剑。科斯塔球风稳健有力,…

飞人博尔特告别足坛 亲承运动生涯结束

18/19赛季澳超季前赛,拥有牙买加短跑名将博尔特的中央海岸水手队以4:0战胜麦克阿瑟西南联。博尔特在比赛中首发上场并收获两粒进球。(资料图) 中新网1月23日电 北京时间22日晚,飞人博尔特发表声明宣布告别足坛,他表示自己很享受过…

足坛诗人--贺炜的5大经典解说

足坛诗人–贺炜 中国足球解说员有很多,由之前的韩乔生,黄健翔,也有之后的詹俊,苏东和贺炜等人。而其中,贺炜凭借自己专业的解说技巧和出色的文学功底,被球迷朋友戏称为贺诗人。 贺炜别名:足球诗…

前锋html5费用,足坛转会费最高的5位前锋,1.05亿欧元仅第5,第1比C罗还高1.22亿...

原标题:足坛转会费最高的5位前锋,1.05亿欧元仅第5,第1比C罗还高1.22亿 大家都知道,前锋对于比赛的胜负非常重要,再加上其关注度比其他位置高,商业价值比较高,所以通常来说,他们的转会…

ajax 足球球员年薪,欧洲足坛税后千万欧元以上年薪的球员,谁最超值?谁是大坑?...

C罗梅西内马尔 欧洲俱乐部的薪水是以一个星期做为一个周期来结算,目前欧洲的豪门球队主力的周薪普遍都在10万欧元(或者英镑)以上,当然这还是个很保守的数字。一个球队为了维持薪资结构的平衡,球员的合同在到期前两年就会续约,周薪…

android手机图标 足球球星,世界足坛九大现役球星标志性绰号,第一名所有人都服!...

原标题:世界足坛九大现役球星标志性绰号,第一名所有人都服! 9,“大腿”桑切斯 自打智利天王桑切斯离开当年无比辉煌的巴萨加盟阿森纳后,就被无数球迷冠以“大腿”的绰号,当然这完全源自于他在英超阿森纳队中…

揭秘史上罕见教练奇才 穆里尼奥的足坛大航海时代

2019独角兽企业重金招聘Python工程师标准>>> 罗布森勤奋离经叛道的穆里尼奥 当2003/04赛季,波尔图队在冠军杯中以黑马姿态高歌猛进的时候,皇马主帅奎罗兹提出了一个今天看来相当愚蠢的问题:"这个穆里尼奥到底算什么人物&…

足坛绝代双骄全面数据对比,梅西30岁以后不如C罗?

在上周末结束的意甲第六轮比赛中,刚刚战胜了新冠病毒火线复出的C罗替补登场打入2球,包括反超比分的1球,帮助尤文图斯以4:1的比分战胜了对手。 已年满35周岁的C罗在新赛季参加的3轮比赛中已经打入5球,岁月似乎并没有延缓这位足坛骄子的脚步,从2008年C罗首次获得国际足联颁…

硬核看球,数据分析足坛转会窗口各队表现

本文转载自1024开发者社区,详情可以扫描下方二维码: 前言 各大联赛在7月初都打开了转会窗口,各路豪强纷纷出巨资对阵容进行补强,比如格列兹曼加盟巴塞罗那(文章图片源于懂球帝): 各家经纪人又到…