UE4 HTC VIVE - 番外篇 - 局域网联机(二)

开始之前先说一下网游中服务器与客户端的大致关系:

网络游戏中各段关系图
客户端职责:

1)接收玩家的输入翻译得到【玩家指令】上传服务器;
2)接收服务器下发的【游戏指令】并将其实现

服务器职责:

1)接收客户端的指令并处理;
2)广播当前帧所需的游戏数据与游戏状态;

强联网中的高带宽与游戏中的卡顿解释:
服务器压力:

我们打团战的时候会出现输入没有响应,正式因为让你的输入产生结果的模块不在客户端而是在服务器;此时服务器要处理大量用户指令计算时间过长外加网络限制,客户端得不到及时的数据更新;
【有预处理机制部分还是能动的,例如部分网游在延迟是时也能正常速率移动,但是在得到最新数据后,玩家将被纠到正确坐标;这正是一种降低小幅延迟的策略,所带来的现象。想继续了解如何解决网络延迟策略的可以传送门https://www.zhihu.com/question/36258781/answer/80841137】

高带宽:

多名玩家同屏时,为了能看到其他玩家的样子和属性值,所以每次更新都需要所有需要绘制的玩家数据,所以高带宽是强联网的前提;

我们再来看局域网中的主机与客户端的关系

主机与客户端的关系

因为主机与客户端本身都是同一套应用程序,所以都包含完整功能;然而局域网游戏中,作为主机的一端除了运行完整的客户端(玩家操作接收处理和图像图形显示)职能外,还需要具有网络结构中的服务器端职能,对整个局域我那个游戏的数据进行计算与存储,逻辑处理与发送;而其他客户端进需要运行客户端部分功能即可参与局域网游戏;(故局域网中主机压力巨大,既要做逻辑与数据运算,还要完成图像显示处理)

--------------------开启本章内容(官方案例讲解)-----------------------------

书接上回在上一篇尾巴上留了RPC介绍,也就是虚幻的函数复制原理,本章我带着大家过一遍官方关于networke的案例,了解一下变量复制与函数复制以便后面使用节点时不会懵逼;

下载官方案例"内容示例"


在这里下载

下载完当然是打开了

打开后我们点击根目录Content,然后使用筛选功能,找出所有场景

然后找到【Network_Features】
这里推荐点击官方的帮助文档“食用”效果更佳:

找到绿色的帮助对象,点击打开帮助文档

英语不好的同学可以切换到中文

案例1.1对象的复制

该场景的查看方式均使用多窗口浏览;

不要忘了上一章讲的多窗口浏览方式和设置方法
本案例将在两个【Target Point】的位置生成幽灵对象;由于对象的蓝图类的Replicates属性的不同,所以表现出不参与复制对象在主机端存在而客户端不存在的效果;

运行结果


1)我们打开场景蓝图与两个幽灵的蓝图类;


两个生成对象所使用的蓝图类是不一样的

虽然是继承关系但是在复制选项上有所区别

可以看到由于两个不同的对象类在复制选项上有所区别,故客户端与服务器的显示结果是不同的,

需要注意的(一定将核心处理限制在主机端):

确认服务器执行


这是联机蓝图的关键所在,逻辑也好数据处理也好,一定要交给服务器来操作,客户端只要做显示与用户操作采集相关的编辑即可;

案例1.2 Switch Has Authority节点学习

该实例通过对服务器和客户端执行不同实现来加深对Switch Has Authority 节点的了解;

显示结果

该幽灵的蓝图

案例1.3值复制(仅更新变量值)

该实例主要使用值复制的方法来实现客户端与主机的数据同步;

运行结果,客户端观察到左侧幽灵的健康值一直为0而右侧的则与服务器同步

右侧的幽灵中关于Health这个int值进做了复制设置
知识点分析:

当变量被标记为Replicated后,在服务器修改该变量数值,系统会及时将其更新到客户端,此时对该变量进行调用则可以拿到更新后的值;【使用在角色属性或是绘制相关数据的同步情景,】

案例1.4值复制(更新变量值时触发一次函数调用)

本实例使用定时修改一个标记为RepNotify的浮点值得方式变更交通灯的状态;我们主要学习RepNotify标记所带来的一次事件调用;

1,创建一个变量
2,标记为Replicated
3,你会发现蹦出来一个与该变量关联的函数
4,桶盖这个函数来对变量赋值即可

标记提供的一次函数调用,此处用来变更材质颜色属性值

为什么灯有变化?有兴趣的同学看看材质蓝图
知识点:

使用该标记后得到的函数调用,可以用来编辑一些诸如生命归零的死亡判断,或是与跟该变量有关的函数赋值操作就像本示例中的材质属性变更都可以写在该函数中;

案例1.5 事件广播Multicast的使用

本实例通过对自定义事添加Multicast标签使其成为服务器在调用时,所有客户端都会触发的事件,达到广播的目的;

触发事件的广播设置

案例2.1 不添加复制标记的蓝图效果

本实例应当是作为参照示例使用,并没有特殊之处

我们可以看到永远是服务器端触发金闪闪实现,
毕竟事件没有加复制标记客户端未接收任何事件调用

案例2.2 依旧是事件广播Multicast的使用

本实例中关于事件广播就不赘述了,我们可以发现一个有趣的事情就是有个圈,在圈外的客户端是无法接收到广播消息的,并且在进入环形范围内也不会再看到触发效果【广播事件是不会被保存的】(当然你站上去也是没用的,以为有DoOne节点,只可能发生一次)

Paste_Image.png
看一下圈是怎么缩放设置的

缩放环形模型大小
该值是每个参与复制的对象,都需要设置的值,该值标示这个对象接收服务器消息数据更新的范围(这个值不能直接用,为了距离比较时削减运算开销所以是个平方值,这里注意一下)

注意该对象的Replicates属性

案例2.3关于如何对进入复制检测范围的对象进行状态更新

本实例中使用了一个bool值来记录状态,当有客户端进入该范围内时更新这个客户端用户的变量值,这个时候会触发Replicated标记创建来的函数,也就实现了开箱和闪光效果


此处将特效显示与箱子翻起的显示部分都放在这个函数内了
知识点:

我们可以模仿此方法,来实现对走入检测范围内的新对象的状态更新;

案例2.4 仅保留开箱后的结果更新,不显示闪光特效

我们可以看到这个版本的蓝图中开箱与闪光特效被分开触发了,这样在触发范围内的客户端可以接收到触发闪光特效也可通过变更bool值变量来完成开箱动画,但是后进入的客户端仅能触发开箱动画,即完成了新版组合方案;


变更后的蓝图

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

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

相关文章

启动文件、简单的消息框

C中打开文件的方法。 1.system(); 函数原型: int system(char *command); 作用:发出一个DOS命令。 特点:该函数是同步的,不灵活。只是能够改为system("start XXX"); 2.WinExec(&#…

UE4 HTC VIVE 多人联机

1. editor的VR模式不支持网络,所以在VR模式下没法调试多人联机程序 2. editor的standalone模式,引擎的源码里面把VR模式关闭了,所以需要修改引擎源码 3.可以在命令行下打开VR模式

.net开发微信公众平台

一、说明:公众平台信息接口为开发者提供了一种新的消息处理方式,只有申请成为开发者后,你才能使用公众平台的开发功能,在这里你需要填写一个URL和一个Token,这两项信息也需要你拥有自己的服务器(外网服务器…

使用客户端对象模型读取SharePoint列表数据

使用客户端对象模型读取SharePoint列表数据 客户端对象模型提供了强有力的方式,从远程客户端应用程序管理列表。1. 管理员身份打开VS,新建项目Windows窗体应用程序,命名ReadSPListData,确保选择.NET Framework 3.5。2. 添加控件。…

UE4 获得player id

获得Player ID 获得Player 位置 获得所有PlayerId

installshield 指定多个自定义路径和文件

1. 在Project Assistant的Application Files标签里面 在Script-defined Folders下面分别创建两个变量AAAA,BBBB。 分别在两个变量下面创建文件夹,A1,B1。 把需要安装在这两个文件夹下的文件分别添加进去。 2. 在Installation Designer标签下&…

用鼠标选择模型表面两点并连线

1.两次鼠标点击分别用两个小球标识点击的位置 2. 鼠标右键实现两个位置之间的连线,并在线的中心位置设置textrender来显示线的长度 3. 设置textrender的朝向始终面向摄像机,并作插值平滑过度 4. 设置鼠标光标可显示,并且关卡可以响应鼠标事件…

java ranger rest_使用REST

使用Spring MVC开发Web应用程序的主要工作就是编写Controller逻辑。在Web应用中,除了需要使用MVC给用户显示页面外,还有一类API接口,我们称之为REST,通常输入输出都是JSON,便于第三方调用或者使用页面JavaScript与之交…

JDK安装与环境变量配置

本文介绍JDK的安装与环境变量配置。 工具/原料 JDK1.7.0 WIN7 方法/步骤 安装JDK 选择安装目录 安装过程中会出现两次 安装提示 。第一次是安装 jdk ,第二次是安装 jre 。建议两个都安装在同一个java文件夹中的不同文件夹中。(不能都安装在java文件夹的…

第一人称视角获得运动方向和视角的夹角

1. GetVelocity获得速度的vector 2. 使用RotationFromXVector和速度的vector得到世界坐标系里速度向量和世界坐标系X轴的夹角 虽然,RotationFromXVector返回的是一个rotation,但实际上只有Yaw值有效,因为Yaw(围绕Z轴的偏转角) 即为速度vecto…

java中CardLayout的使用方法

import javax.swing.*;import java.awt.*; import java.awt.event.*;public class Card extends JFrame{/** JFrame的布局管理器是BorderLayout*/JPanel p;//位于中心区域的面板JButton b1,b2,b3,b4;//位于南部区域的四个按钮JLabel l1,l2,l3,l4;CardLayout c;//设置面板p的布局…

深入浅出UE4网络

UE4中的官方文档结构比较混乱,且有部分错误,不方便学习。笔者试图通过本文,整理出一篇关于UE4网络的文章,方便朋友们对UE4中的网络同步部分的认识,并有进一步理解。如有讲得不清楚明白的地方,还望批评指正。…

java载屁股针_以前常打的“屁股针”,为何现在很少见了?医生告诉你真实原因...

打屁股针应该是每个人的童年噩梦,还记得小时候到医院打针,医生的手还没碰到裤子,就感觉屁股发麻,忍不住拔腿就跑,最终还是被家长逮住,夹在大腿间固定住,防止逃跑,于是在哭喊声中迎来…

Windows中查找文件被何进程使用

这篇文章记录在对文件/文件夹删除、更改,移动时,Windows弹窗提示正在被某程序使用,但又不给出进程名的问题。 方法一、 在任务管理器中,切换到性能项,有一个资源管理器,如下: 进入资源管理器&am…

UE4 多人联机显示每个人的playid

目的:在多人联机模式下,在每个pawn的上方显示textrender,并且在textrender里显示每个pawn的playerid 下面以一个listen server和两个client的方式测试。 1. 创建一个带有textrender的actor,并且勾选其replicated开关 2. 在Chara…

TSubclassOf

在蓝图或C层面调用SpawnActor创建一个actor对象,或者调用SpawnActorDeferred 延迟创建一个actor对象时,都需要一个class类型的参数。 如果在C层面,对象类型是我们自己在蓝图里做的蓝图类,那么C层面需要得到蓝图类型。做法如下&am…

蓝图中实现人物移动1

从Character继承一个蓝图类并编写下面代码1.得到前后移动的方向向量2.得到左右移动的方向向量3. 实现前后移动事件4. 实现左右移动事件5. 实现鼠标左键改变视角和移动方向

Java写一个快速排序_java实现快速排序

以上为思路。总的来说,快速排序也是利用了分治法的思想。基本步骤:1.先选择好合适的主元pivot,2.然后再把比主元小的元素放到主元的左边(右边),把较大的元素放到主元的右边(左边),3.接着再以主元为分界点,把…

解密ControlRotation与ActorRotation

在实现角色移动时,我们是通过获取当前角色向前或者向后移动的向量来计算具体的移动步长,进而增量设置角色位置以达到使角色移动的目的。但是获取向前或者向后的向量得先知道当前角色在世界坐标系中旋转的角度,于是我们就在ControlRotation和A…