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);