UProjectileMovementComponent组件同步

本文探讨了UE中的UProjectileMovementComponent在网络游戏中的同步问题。默认情况下,该组件仅本地有效,导致客户端和服务器位置不一致。解决方法包括设置Actor的bReplicateMovement为True,重写PostNetReceiveVelocity函数以确保速度向量的同步。通过PreReplication和OnRep_ReplicatedMovement事件实现Transform同步。
摘要由CSDN通过智能技术生成
 
 

UProjectileMovementComponent是UE中的抛体组件,可以用来仿真抛体运动,比如子弹,手榴弹,甚至是带有动力和追踪功能的导箭。但是UProjectileMovementComponent默认情况下仅仅本地有效,没有对网络进行Transform同步。

如果大家使用过这个组件,会发现在联网游戏中客户端和服务器的对象会出现位置不一致的情况,还有可能会出现对象跳动的现象,这些都是没有同步的表现,需要我们进行处理。

Actor的同步

在研究抛体组件同步之前,先来看看Actor是如何进行Transform同步的。

Actor的Transform实际上是根组件的Transform,因此对Actor的同步实际上就是对根组件的同步。

在客户端和服务器的连接后,会在连接的Socket上面建立一个个Channel,服务器上面的每一个对象都对应着一个ActorChannel,通过这个Channel,客户端和服务器的Actor建立通信通道,然后会进行数据同步和RPC调用,以及发起属性通知。

在Actor中,有一个标记bReplicateMovement被用来标记Actor是否同步,这个属性在蓝图的属性面板上面也有,如果标记为True,那么会进行相关的同步操作。

/**
 * If true, replicate movement/location related properties.
 * Actor must also be set to replicate.
 * @see SetReplicates()
 * @see https://docs.unrealengine.com/latest/INT/Gameplay/Networking/Replication/
 */
UPROPERTY(ReplicatedUsing=OnRep_ReplicateMovement, Category=Replication, EditDefaultsOnly)
uint8 bReplicateMovement:1; 

Actor的Transform属性是通过一个特殊的结构体ReplicatedMovement来进行传递的,里面包含了相关的需要同步的属性,在ReplicatedMovement中的属性值发生改变的时候,会调用OnRep_ReplicatedMovement进行事件通知。

/** Used for replication of our RootComponent's position
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值