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);

 

你可能感兴趣的:(UE4,C++)