ue4基于ShooterGame实现弩

需求,实现武器弩
1.实现可发射projectile的武器,类似shooterweapon_projectile
2.弩击中地面(场景上的静态物体)上则箭插在地面上,如果击中可移动的刚体则箭跟着刚体一起运动,如果打到怪身上,则会跟着怪的bone一起变换(也就是说在怪的bone空间相对变换固定不变)
第一条容易实现,只要从shooterweapon_projectile派生即可,主要在实现第二条。
这里需要简单了解一下projectile的实现原理,
projectile以一定的速度发射,根据碰撞设置,如果碰到东西也停止移动,隐藏projectile并触发爆炸效果(包括播放特效和处理范围伤害)。
知道了这些,弩击中地面的效果就容易实现了。弩击中地面会触发相应的事件(假设叫onimpact),并且弩会停止移动,此时不需要做任何处理,就可实现箭插在地面上的效果。当然,此时可能箭头刚刚和地面接触,如果想实现箭头插的比较多,可以在onimpact中把箭向正前方移动一定距离。
要实现箭击中可移动刚体,并且跟着刚体一起运动,则需要把箭和可移动刚体绑定在一起。在ue4中可通过attachtocomponent实现此效果。注意一点就是attach完要正确设置箭的位置。我在这里使用的方法是attach前先记录component的transform,attach后在用记录的transform设置箭的transform。
最后,要实现箭射中怪身上的某个bone,并且跟着bone一起移动,稍微麻烦一些。在ue4中没有找到attachtobone的功能,只有attachtosocket的功能,而且一般socket都是提前创建好的。这里我的处理方法是基于一点,箭在击中的bone空间的transform是不变的,这样就可以在箭的tick里,根据箭在bone空间的相对transforn,去实时计算箭在world空间的transform,这样,弩的功能就做好了

猜你喜欢

转载自blog.csdn.net/xiaozhi0999/article/details/80622816