RPC必须由客户端PlayerController或控制的Actor发起,不可由其他的Actor发起
比如Character捡起一个Hoe
Characte中定义了
UCLASS(config = Game)
class ACharacter:public APawn
{
void Interactive(Actor*Hoe)
{
Hoe->OnCharacterInteractive(this);
}
}
Hoe中定义了
UCLASS()
class ORDINARYOCCUPATIONS_API AHoe : public ATool
{
void OnCharacterInteractive(ACharacter*Character)
{
Character->PickUp(this);
}
}
RPC错误声明方式:把Hoe中的交互方式声明为Server
步骤:在客户端对Hoe调用Interactive
结果:无法成功调用OnCharacterInteractive函数(并且没有任何报错或提示,搞得我都有点怀疑人生了)
原因:在客户端的Hoe是一个客户端本地的复制代理,并非Hoe在服务器上的实体,会默认静音被声明为Server的函数
UCLASS(config = Game)
class ACharacter:public APawn
{
void Interactive(Actor*Hoe)
{
Hoe->OnCharacterInteractive(this);
}
}
UCLASS()
class ORDINARYOCCUPATIONS_API AHoe : public ATool
{
UFUNCTION(Server,Reliable)
void OnCharacterInteractive(ACharacter*Character)
{
Character->PickUp(this);
}
}
正确声明方式:在由玩家控制器控制的Character中声明Server函数
原因:UE中只能通过客户端的Controller和被Controller控制的Actor向服务端发起申请。
UCLASS(config = Game)
class ACharacter:public APawn
{
UFUNCTION(Server,Reliable)
void Interactive(Actor*Hoe)
{
Hoe->OnCharacterInteractive(this);
}
}
UCLASS()
class ORDINARYOCCUPATIONS_API AHoe : public ATool
{
void OnCharacterInteractive(ACharacter*Character)
{
Character->PickUp(this);
}
}

5024

被折叠的 条评论
为什么被折叠?



