UE4 C++ 中如何控制武器开火频率

开火频率如果只是在Tick中简单实现会有诸多问题这里可以使用定时器函数来调用开火,定时器已在之前文章中讲到这里不赘述。

 

首先声明一些我们需要的变量:

float  LastFireTime;   //记录之前开火的时间

float  RateOfFire  =  400.0f;   //每分钟的开火速率

float  TimeBetweenShots  =  60/RateOfFire;  //获取到开火时间间隔

 

其中LastFireTime应当在武器开火函数结束后获取当前时间进行赋值:

LastFireTime  =  GetWorld()->TimeSeconds;

 

之后我们要得到首次开火的延时时间FirstDelay(要解决的是玩家快速点击鼠标时忽略开火时间间隔的问题),通过之前的开火时间加上开火时间间隔减去当前时间即可得出,其中 FMath::Max函数是为了避免得出负数,此函数会返回两个值中最大的值(算法多看几遍即可理解):

float  FirstDelay  =  FMath::Max(LastFireTime + TimeBetweenShots  -  GetWorld()->TimeSeconds , 0.0f);

 

然后设置定时器调用开火函数的频率和首次开火的延时即可:

GetWorldTimerManager().SetTimer(Hand,this,&XXX::Fire, TimeBetweenShots,  true ,FirstDelay);

 

最后可以在停火时调用清理定时器即可:

GetWorldTimerManager().ClearTimer(Hand);

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值