天天看点

UE4 网络学习笔记

使用网络的一些前置条件

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

继续阅读