USimpleWheeledVehicleMovementComponent不像UWheeledVehicleMovementComponent4W帮你写好同步了,simpleWheeledVehicleMovement的input需要自己写RPC;
以下是输入移动的rpc代码
XXX.h
void MoveForward(float X);
UFUNCTION(Server, Reliable)
void ServerSetDriveTorque(float Value);
UFUNCTION(NetMulticast, Reliable)
void ClientsSetDriveTorque(float Value);
void MoveRight(float X);
UFUNCTION(Server, Reliable)
void ServerSetSteering(float Value);
UFUNCTION(NetMulticast, Reliable)
void ClientsSetSteering(float Value);
void ATestBaseVehicle::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("MoveForward", this, &ATestBaseVehicle::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &ATestBaseVehicle::MoveRight);
}
void ATestBaseVehicle::MoveForward(float X)
{
ServerSetDriveTorque(X);
}
void ATestBaseVehicle::ServerSetDriveTorque_Implementation(float Value)
{
GetVehicleMovement()->SetDriveTorque(Value * 2400.0f, 1);
if (GetLocalRole() == ROLE_Authority)
{
ClientsSetDriveTorque(Value);
}
}
void ATestBaseVehicle::ClientsSetDriveTorque_Implementation(float Value)
{
GetVehicleMovement()->SetDriveTorque(Value * 2400.0f, 1);
}
void ATestBaseVehicle::MoveRight(float X)
{
ServerSetSteering(X);
}
void ATestBaseVehicle::ServerSetSteering_Implementation(float Value)
{
GetVehicleMovement()->SetSteerAngle(Value * 50.0f, 0);
if (GetLocalRole() == ROLE_Authority)
{
ClientsSetSteering(Value);
}
}
void ATestBaseVehicle::ClientsSetSteering_Implementation(float Value)
{
GetVehicleMovement()->SetSteerAngle(Value * 50.0f, 0);
}
更新:如果使用4.27-chaos版本,或5.0版本 ,使用ChaosWheeledVehicle,可以直接配置成 任意 轮子数目的载具;