这是UC武器系统的类结构图,我不会每一种武器都讲,只会分析刀及CharGun实现,因为其它都是类似的。
UCWeapon是武器系统的根类,它不会做具体的事情,它只有两种行为,一种是BaseAction,另一种是AltAction,要理解这两种Action,可以考虑枪。枪是一种既可以近战又可以远战的武器,射击就是BaseAction,用枪托砸人就是AltAction,这两种Action不可能同时出现,因此有
BaseActionInternal及AltActionInternal来控制,所以UCWeapon在Tick(Update)里就做一件事情,不断的检查玩家是否可以做出BaseAction及AltAction,
UCWeapon的BaseAction
首先检查能否执行武器的BaseAction,如果可以获取武器的骨架系统播放Montage动画,然后执行PrivateBaseAction,设置BaseAction的时间长度,这里就着重谈一下为什么要播放Montage,这时因为不同的武器行动的时候,它们的动画是不同的,刀攻击的时候得前进吧,枪攻击的时间得有一个枪口上仰的动画吧,但这些只有具体的子类才知道,UCWeapon是不会知道的
对UCWeapon了解之后,就可以分析简单的武器刀了,
当玩家左键刀攻击时,父类UCWeapon播放了刀的动画,有趣的事情就发生了,UCWeaonKinfe本身是不知道玩家攻击了这种事情的,但有趣的是刀在每一帧的Tick事件里去检查了刀的攻击动画是否有播放,
如果有播放就说明攻击了,那这把刀真的能伤人吗?未必,刀伤人与刀没有半毛钱的关系,
对着刀的模型图,就能看出来是从刀柄到BlageTop发处一条线,如果有碰到什么东西就认为是攻击到了,如果碰撞到了东西,且这个东西能转换为Bot怪,就通知Bot怪,你被攻击了,关于AI的以后会再讲;如果转换Bot怪失败就认为是碰到了墙,就会给它一个力,及一些毁坏,如果它支持物理效果就会看出来了
刀的分析就结束了