UC的主角是一个左手拿刀,右手拿枪,自带时间控制BUFF的高手,有枪就得有子弹,UC中获取子弹有三种方式

LevelBP里设置子弹

image

捡起ShotGun时会给两发子弹,最常用的是在一个箱子里呆着,会最高给3发子弹,

image

这也是要分析的一种给子弹方式,这个盒子是一个普通的BP,带有一个Volume在层次结构上,这样就可以检查玩家是进入与离开

image

EventGraph里处理了几个事件,BeginOverlap/EndOverlap/Tick,

image

BeginOverlap事件最重要的是设置CharInVolume为true,这样Tick事件里才会认为玩家在box里,EndOverlap事件对应就是清掉这个标志

Tick事件,主要就是做三件事,把Box里的子弹数目绕向玩家、加子弹、处理时间效果,这里只介绍加子弹

image

加子弹的条件时Box没有被destroy及玩家在box里,其次是检查子弹是否已经加满,默认是加3颗

image

最后玩家必需要待上一段时间才能加子弹,

image

上面这段BP代码翻译成数学是这样一个公式(delta / GTD + AT) > AI如果为真就加子弹,通俗一点的话说就是假设1秒钟加子弹,那玩家在每一帧都会累计AT的值,当大于AI时就加子弹了

image

然后就是调用character里的函数AddAmmoToGun,ActionCounter加1 ,AT清0继续累计,盒子的弹药数量减1并显示,

MyCharacter的函数AddAmmoToGun,

image

很清楚,它是调用范围类武器加子弹,但这里关心的是通知了AddAmmoEvent事件,这个事件是用来通知玩家头上的TextRender显示一些提示性文字的

最后就是HUD里是怎么显示弹药的,

image

这时因为UMG里控件绑定一个GetText0函数

 image

GetText0从玩家身上获取弹药,然后就是拼装字符串

image

 

-----------转载请标明出处