控制SSR功能的开放
目的
对于非常高延迟的用户,这个功能不希望开放,因为可能降低其他用户的体验。
利用对Ping的判断,更改武器中控制SSR的布尔值,注意服务器和客户端需要同步,所以可以对该布尔值变为可复制的,利用属性赋值,当服务器上的值发生了改变就可以传递到客户端
//只需要对当前武器的Owner客户端产生改变就可以了
DOREPLIFETIME_CONDITION(AWeaponParent, bUseServerSideRewide,COND_OwnerOnly);
实现方法
检测Ping
这一部分在Controller进行,通过利用UE自带的GetPing,然后和设置阈值作比较即可。
通知RPC
该ServerRPC用来告知当前客户端的Ping过高还是过低
修改SSR布尔值
利用委托的方式,当ServerRPC被调用时,进行委托的广播,然后所有监听该委托的事件执行
就是在Weapon类中,设置一个函数,然后绑定到Controller的这个委托上,该函数内部执行对SSR的布尔值的控制
// Controller
//.h
DYNAMIC_...(FOnCallPing, bool bIsTooHigh)
FOnCallPing OnCallPing
UFUNCTION(Server)
ServerCallHighPing(bool bhigh);
//.cpp
if(//ping too high)
{
ServerCallHighPing(true);
}
else
{
ServerCallHighPing(false);
}
ServerCallHighPing(bool bhigh)
{
OnCallPing.Broadcast(bhigh);
}
// Weapon
//.h
setSSR(bool bhigh);
Controller* controller;
//.cpp
OnEquipped()
{
if(controller && HasAuthority && !controller->OnCallPing.IsBound())
controller->OnCallPing.AddDynamic(setSSR);
}
OnDropped() //丢枪时就抛弃委托
{
if(controller && HasAuthority && controller->OnCallPing.IsBound())
controller->OnCallPing.RemoveDynamic(setSSR);
}
setSSR(bool bhigh)
{
bSSR = !bhigh;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步