UE Gameplay网络复制基础

Gameplay网络基础

基于会话的实时游戏:查找(找到别人的服务器),链接(加入到别人的服务器),同步(同一时间发生的事情都能接收)。

游戏是由输入和状态组成的,玩家输入按键对应技能移动,状态对应死亡,奔跑,攻击,被攻击等等。

点对点 p2p(peer two peer)

UE并没有使用点对点模型,原因1扩展性差2网络连接速度不确定3不公平易作弊。优点:方便只有两个人的时候用点对点模型最佳!

UE使用的是客户端服务器模型(Client-Server)

解决了点对点模型的缺点,由服务器判断客户端的内容真实。总结服务器永远是最权威的,客户端的消息不能相信。

Gamepaly

是指游戏规则、玩家输出与控制、相机和用户界面等核心系统。

AActor->UObject。可以相互嵌套,拥有tick,网络通信通道(指网络同步),组件的容器(其它组件可以挂在上面),可生成的不是所有的actor都是可见的。WorldSetting和关卡蓝图都是actor。

Compoent分ScenceComponent和ActorComponent,ScenceCom可以嵌套拥有世界坐标继承与ActorCom,而ActorCom不可以也没有坐标设置。

Com代表一种能力,可以给Actor提供能力与代码逻辑无关只要使用UE引擎都能使用。

APawn包括ACharacter(人物人性类型的类)和AdefaultPawn(自定义的类,小灰球)->ASpectatorPawn(观众视角的,观看比赛)

可被控制,采用MVC设计,相当于容器。而controller相当于灵魂用来控制pawn,这两个是要连起来一起看。用来写攻击方式比如用枪用手等等。

Controller包括APlayerController(控制玩家即主角)和AAIController(控制怪物)移动攻击相关,但攻击类型方式则是在pawn里面。注:PlayerIndex是给分屏游戏用的,如魂斗罗这种双人游戏。

APlayerState

继承于AInfo,记录pawn和controller的状态。

AGameMode

游戏规则世界规则,一般规定游戏怎么玩,如何胜利。最权威只存在于服务器。继承AInfo->AGameModeBase->AGameMode

AGameState

世界的状态,可以通过网络通知到客户端。继承AInfo->AGameStateBase->AGameState

UGameInstance

游戏的全局实例,可以跨关卡保存数据,不进行网络复制。

继承 UGameEngine->UGameInstance->FWorldContext->UWorld。

USaveGame

游戏存档,数据保存到本地。一般存档保存继承与该类,不继承网络复制。

USubsystem

业务逻辑的组件,自动实例化对象,托管的生命周期。有五类生命周期

  1. UEngineSubsystem-UEngine*Gengine
  2. UEditorSubsystem-UEditorEngine*GEditor
  3. UGameInstanceSubsystem-UGameInstance*GameInstance
  4. UWorldSubsystem-UWorld*World
  5. ULocalPlayerSubsystem-ULocalPlayer*LocalPlayer

多人联机中的GamePlay划分

ServerOnly:仅存在服务器(GameMode)。Server Clients:存在服务器和所有客户端(AGameState,APlayerState,APawn)。Server Owning Client:存在服务器与拥有的客户端(APlayerController)。Owning Client Only:仅存在拥有的客户端(UMG,AHUD)。

专用服务器和监听服务器

专用服务器:不需要客户端的独立服务器,与游戏客户端分开运行,没有可视部分,在游戏中也没有代表他们的角色。

监听服务器:是服务器的同时也是客户端,始终至少连接一个客户端,如果断开连接,服务器将关闭。拥有可视部分。

总结:监听服务器类似于开房创建的玩家,如游戏DOTA,饥荒。专用服务器不是玩家创建的。

Replication

标记为复制的AActor在服务端生成的同时也会在客户端生成,但在客户端生成时仅存在于客户端。

需要设置物体复制SetReplicates(true)和移动复制SetReplicateMovement(true)。

变量属性也可以进行复制,找到Replication有两种模式一种为replicated这个只是单纯的复制,另一个RepNotify这个不仅复制还会提供一个函数,每次数值改变会进行调用。

Role和RemoteRole

ROLE_SimulatedProxyt-----模拟的,由服务器同步过来的,不能控制。

ROLE_AutonomousProxyt-----自制的,自己控制由服务器监管

ROLE_Authorit------权威的,就在服务器上

物体的主控权,如果在服务器看客户端的物体则是权威的,如果是客户端看客户端自己的则是自制的,反之客户端看服务器是权威,看自己不变。

一般判断是否在服务器使用isServer和HasAuthority。

RPC - Remote Procedure Calls——远程过程调用

用于调用在另一个实例上的函数,RPC无返回值,有以下特定规则:Run on Server:将在Actor的服务器实例上执行。Run on owning Client:将在此Actor的所有者上执行。Multicast:在此Actor的所有实例上执行。

RPC注意事项

必须从复制AActor调用。如果从服务器调用RPC以便在客户端上执行,只有实际拥有该Actor的Client才能执行该功能。如果要从Client调用RPC在Server上执行,则Client必须拥有要调用RPC的Actor。

Multicast RPC(多播委托)

如果从服务器调用它们,则服务器将在本地执行它们,并在所有当前连接的客户端上执行它们。

如果从客户端调用它们,它们将仅在本地执行,而不会在服务器上执行。

将RPC标记为Reliable(可靠):确保将执行99.99%的RPC,不要标记所有PRC为可靠,因为会消耗带宽。

RPC可以带Validation(验证):仅支持C++,拥有一个验证函数如,RPC的验证函数检测到任何参数错误,它可以通知系统断开发起RPC调用的客户端/服务器的连接。

(蓝图中使用RPC是需要Event事件,在graph里有replicates属性选择,以及选择是否可靠reliable)

在服务器创建的物体不复制,客户端观看不到但会有作用,如透明墙原理。同样不复制在客户端生成同样会出现透明墙但可以穿过只是会抽搐。如果选择可复制在客户端运行情况和上面一样,但是在服务端生成则全部能看到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
UE4中的Gameplay框架是一个强大的工具集,用于开发和实现游戏玩法和用户交互。该框架提供了许多功能和组件,以帮助游戏开发者快速构建出丰富、流畅的游戏体验。 UE4Gameplay框架主要由以下几个方面组成: 1.输入系统:该系统可以处理各种输入设备的操作,如鼠标、键盘和游戏手柄。开发者可以轻松地设置和管理输入映射和按键绑定。此外,还提供了鼠标和手柄的即时响应和移动方向控制功能,使玩家能够自由操作游戏中的角色。 2.角色控制器:角色控制器是游戏玩家在游戏中扮演的角色,他们的控制是通过输入系统和蓝图来实现的。游戏玩家可以移动角色、执行动作、攻击敌人等。角色还可以通过动画系统实现自然的运动和交互。 3.人工智能:UE4Gameplay框架提供了内置的人工智能系统,可以对NPC和敌人进行编程控制。开发者可以设置敌人的行为模式、路径寻找和攻击策略,让游戏中的敌人具有更真实和智能的表现。 4.物理模拟:UE4Gameplay框架使用了物理引擎来实现真实的物理模拟效果,比如碰撞、重力和刚体运动等。这使开发者能够创建更真实和具有交互性的游戏世界,使玩家可以与环境进行互动。 总之,UE4Gameplay框架提供了强大而灵活的工具,帮助开发者轻松地构建出丰富多样的游戏玩法和用户交互。无论是开发动作冒险游戏、射击游戏还是角色扮演游戏,该框架都能满足开发者的需求,并带来令人惊叹的游戏体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值