目录
1. 创建魔法粒子
在UE中从Actor派生出一个公共class,命名为SurMagicProjectile,表示这个类用于实现魔法投掷物攻击。创建完毕后在.h文件中添加三个用于计算碰撞和显示特效的组件,并在.cpp中创建实例:
// SurMagicProjectile.h
class USphereComponent;
class UProjectileMovementComponent;
class UParticleSystemComponent;
UCLASS()
class SURKEAUE_API ASurMagicProjectile : public AActor
{
protected:
// 球体,用于计算碰撞
UPROPERTY(VisibleAnywhere)
USphereComponent* SphereComp;
// 投射体,控制球体的运动
UPROPERTY(VisibleAnywhere)
UProjectileMovementComponent* MovementComp;
// 粒子系统,控制特效
UPROPERTY(VisibleAnywhere)
UParticleSystemComponent* EffectComp;
};
// SurMagicProjectile.cpp
#include "Components/SphereComponent.h"
#include "GameFramework/ProjectileMovementComponent.h"
#include "Particles/ParticleSystemComponent.h"
ASurMagicProjectile::ASurMagicProjectile()
{
SphereComp = CreateDefaultSubobject<USphereComponent>("SphereComp");
RootComponent = SphereComp;
MovementComp = CreateDefaultSubobject<UProjectileMovementComponent>("MovementComp");
MovementComp->InitialSpeed = 1000.0f;
MovementComp->bRotationFollowsVelocity = true;
MovementComp->bInitialVelocityInLocalSpace = true;
EffectComp = CreateDefaultSubobject<UParticleSystemComponent>("EffectComp");
EffectComp->SetupAttachment(SphereComp);
}
代码编写完毕后,需要在UE中创建蓝图类,步骤同之前创建的Player。
![3eb7aafec00d45ebb3eb1252bce5e64a.png](https://img-blog.csdnimg.cn/3eb7aafec00d45ebb3eb1252bce5e64a.png)
然后打开MagicProjectile,在粒子系统控件EffectComp的“粒子”属性中随意选择一种模板,我这里选择的是P_Gideon_Primary_Projectile。在选择模板后我们可以直接在界面中间的视口中看到粒子特效的样子。
2. 控制粒子生成
我们需要通过鼠标点击或键盘按下,来控制生成上述魔法粒子。要实现这个功能,可以参考前文有关控制人物移动的操作,需要在SurCharacter.cpp的SetupPlayerInputComponent()函数中绑定一个新动作。不同于控制移动的轴绑定,对于按下按钮这种动作需要使用操作绑定,即BindAction()函数:
// 绑定按键动作("UE中调用的名称";触发的时机如按下或释放;对象;具体方法实现)
PlayerInputComponent->BindAction("PrimaryAttack", IE_Pressed, this, &ASurCharacter::PrimaryAttack);
为此,需要增加一个控制释放攻击的函数PrimaryAttack()。这个函数的核心是GetWorld()在当前世界下SpawnActor()来生成上面创建的魔法粒子。其中传入三个对象参数分别为:要生成的对象的class、所有Actor基本的Transform变换属性(控制Actor的位置和缩放)、生成的相关参数设置,更详细的使用可以参考