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

作者:XTG111

出处:https://www.cnblogs.com/XTG111/p/18370646

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   XTG111  阅读(9)  评论(0编辑  收藏  举报
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示