使用网络的一些前置条件
1,要 #include “Net/UnrealNetwork.h”
3, 要复制的Actor的bReplicates要设置为true,否则不会复制
属性复制
1, 当要对Actor的某个属性进行网络同步(从服务器复制到客户端)是要在属性的URPOPERTY()中添加Replicated 说明符。
同时需要实现GetLifetimeReplicatedProps函数,不然编译不会通过,在函数中使用DOREPLIFETIME()宏进行注册属性同步规则。
Actor的bReplicates 要设置为True.
Controller和Pawn的联系
1, 在Pawn的Pawn::PostInitializeComponents() 是Controller是为nullptr.
要进行一些有Controller之后的设置可以在 Pawn::PawnClientRestart() 方法里进行设置,
在网络中,这个方法由PlayerController调用RPC函数Controller::ClientRestart(APawn);
最后在Controller::ClientRestart_Implementation(APawn* NewPawn) 中设置Controller和调用Pawn::PawnClientRestart();
RPC
1,安全校验
如果RPC函数的说明符中添加了(WithValidation)那么我们就可以添加一个安全校验函数,该函数要以_Validation结尾如下:
bool AShooterCharacter::ServerSetRunning_Validate(bool bInRunning, bool bInToggle)
可以在这个方法里面添加对参数的校验如果,参数有问题返回false就会断开这个连接
该校验是在被调用端进行,gen.cpp中有如下定义
DEFINE_FUNCTION(AShooterCharacter::execServerSetRunning)
{
P_GET_UBOOL(Z_Param_bInRunning);
P_GET_UBOOL(Z_Param_bInToggle);
P_FINISH;
P_NATIVE_BEGIN;
if (!P_THIS->ServerSetRunning_Validate(Z_Param_bInRunning,Z_Param_bInToggle))
{
RPC_ValidateFailed(TEXT("ServerSetRunning_Validate"));
return;
}
P_THIS->ServerSetRunning_Implementation(Z_Param_bInRunning,Z_Param_bInToggle);
P_NATIVE_END;
}