因此,我刚刚开始在一个新的项目在虚幻,这是一个简单的网络多人游戏。到目前为止,我所做的是创建一个武器类来处理炮弹的生成,并在beginplay上为玩家角色提供一个武器实例。
武器类很简单,但我遇到的问题是,我用于生成射弹的服务器rpc不是从客户端调用的,而是从服务器调用的。
以下是我如何调用此rpc:
玩家角色有一个
OnFire
方法,它绑定到输入操作。
这就叫
Fire
玩家当前武器的方法。
PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &AMultiplayerFPSCharacter::OnFire);
...
void AMultiplayerFPSCharacter::OnFire()
{
if (CurrentWeapon)
{
CurrentWeapon->Fire(GetControlRotation());
}
}
现在,武器是
火
方法只需调用服务器rpc来实际处理生成射弹。
void AWeapon::Fire(const FRotator SpawnRotation)
{
UE_LOG(LogTemp, Warning, TEXT("LOCAL Fire"));
Server_Fire(SpawnRotation);
}
void AWeapon::Server_Fire_Implementation(const FRotator SpawnRotation)
{
UE_LOG(LogTemp, Warning, TEXT("SERVER RPC: Called RPC"));
if (ProjectileClass != NULL)
{
....
}
}
我还有服务器rpc的验证方法,它只返回true,这样我就可以确保它实际工作。
这个实现在服务器或侦听服务器上都很好,但是当我从客户端调用它时,我只得到本地的
火
武器上的方法。客户端甚至从不调用服务器rpc。
我想我找到的一个办法是
昂菲尔
方法也可以是服务器rpc,但这似乎不是执行此操作的最佳方法。
有人能解释为什么会这样吗?