ue4-Network相关-变量同步:蓝图中同步:选择变量属性 Replication 为 Replicated,有三个可选值。
None:默认值,不会同步给服务端 Replicated:同步给服务端,再同步给其他客户端 RepNotify:选择这个的时候,会 Functions 中生产一个变量 Var 对应的方法 OnRep_Var,在 Var 改变的时候会回调 服务器和所有客户端 中该Actor的这个 OnRep_Var 方法,
参考:https://docs-origin.unrealengine.com/latest/INT/Gameplay/HowTo/Networking/ReplicateVariable/Blueprints/index.html
c++中同步:
在变量中加入标记 Replicated
?
1 2 | UPROPERTY(Replicated, EditAnywhere, BlueprintReadWrite, Category = AMyNetCharacter) int32 Cash; |
重写 AActor 的 GetLifetimeReplicatedProps 方法,加入需要同步的变量 Cash
?
1 2 3 4 5 | void AMyNetCharacter::GetLifetimeReplicatedProps(TArray<flifetimeproperty>& OutLifetimeProps) const { Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME(AMyNetCharacter, Cash); }</flifetimeproperty> |
在构造函数中修改成员 bReplicates 为 true
?
1 2 3 4 5 | AMyNetCharacter::AMyNetCharacter() { Cash = 456 ; bReplicates = true ; } |
变量标记的可选值,和蓝图对应,意思差不多 NotReplicated:不会同步给服务端 Replicated:同步给服务端,在同步给其他客户端
ReplicatedUsing:选择这个的时候,需要指定一个 Var 改变时对应的 OnRep_Var(命名无特殊要求,不过还是按照蓝图生成的规则以 OnRep_ 前缀),在 Var 改变的时候会回调这个 OnRep_Var 方法。规则和 Replicated 差不多,示例如下:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | UFUNCTION(BlueprintCallable, Category = AMyNetCharacter) virtual void OnRep_Money(); void AMyNetCharacter::OnRep_Money() { FString msg = FString::Printf(TEXT( "--- OnRep_Money money:%d" ), Money); GEngine->AddOnScreenDebugMessage(- 1 , 5 .f, FColor::Red, *msg); } // 指定回调函数为 OnRep_Money UPROPERTY(ReplicatedUsing = OnRep_Money, EditAnywhere, BlueprintReadWrite, Category = AMyNetCharacter) int32 Money; //重写的 GetLifetimeReplicatedProps 方法中加入需要同步的变量 DOREPLIFETIME(AMyNetCharacter, Money); |