坦克大战项目总结二
7,制作AIController
在TankAIController的Tick中,由于该类包含了TankMovementComponent组件
而该组件是继承NavMovementComponent组件,将自动寻路NavMesh组件加进来,可以调用MoveToActor方法自动寻路到角色,然后拿到火控组件,调用瞄准函数,如果处于目标锁定状态(坦克瞄准到了角色坦克)就开火
在TankMovementComponent类文件中覆写该方法:
在该方法中,找到AI坦克的速度,找到该速度在前向和右向的分量,然后调用移动函数,就可以实现AI坦克的移动和射击了
8,实现炮弹发射特效
在Projectile炮弹类中include粒子特效组件和碰撞组件
为了让这些组件可以在蓝图中显示右侧的属性,在声明中加上UPROPERTY,因为让它们的属性可以看到不用编辑,写成VisibleAnywhere即可
在炮弹构造函数中生成这些组件,其中SetRootComponent是把该组件放到根节点上,SetNotifyRigidBodyCollsion是产生碰撞模拟属性,
在蓝图中就生成了组件,
在LaunchParticle的属性中选择粒子的效果文件,并在代码中发射炮弹函数中加上LaunchParticle->Activate();让它产生效果,因为构造函数中写的是False,并在蓝图属性中打钩
这样就有粒子效果
要给炮弹发射后有烟雾的痕迹效果,
在Required中取消勾选Use Local Space
在Spawn中Constant输入50,也即生成50个烟雾,也即炮弹飞走过程中不断生成烟雾
在Lifetime中调整烟雾消散的弥漫周期
9,实现炮弹碰撞击退效果
要模拟炮弹被打中击退效果,蓝图中的做法是:添加RadialForce组件,在属性中,把影响范围设为500,力设为1000
在beginPlay中延迟3秒后施加这个力,那么3秒后再范围内的物体如果勾选了物理碰撞模拟的物体都会受到力而发生被击退的效果
在c++中这样做:在炮弹Projectile类中
声明:
构造函数中产生该组件,不让它产生力
在子弹发生碰撞函数中,让子弹不再发生碰撞效果,销毁子弹mesh,施加力的击退效果
在蓝图中就多出来这个组件,在属性中把Impulse的力设为很大
击退效果如下: