🚀 Unreal Engine - UProjectileMovementComponent


🏷 定义

  • UProjectileMovementComponent专门为子弹/投掷物/魔法弹等抛射体设计的移动组件
  • 它会在每帧根据速度、重力、碰撞等参数自动更新位置和方向。
  • 特点:自动飞行、可配置重力/弹跳/摩擦、支持事件回调

🧩 类继承关系

UObject
 └── UActorComponent
      └── UMovementComponent
           └── UProjectileMovementComponent

  • UMovementComponent:所有移动组件的基类,负责位置更新与碰撞处理。
  • UProjectileMovementComponent:扩展了速度、重力、弹跳等专用于抛射物的逻辑。

⚙️ 关键特性

  • 速度驱动
    • InitialSpeed:初始发射速度。
    • MaxSpeed:最大速度上限。
    • Velocity:当前速度向量,可随时修改。
  • 方向与旋转
    • bRotationFollowsVelocity:是否让 Actor 自动朝速度方向旋转。
    • bInitialVelocityInLocalSpace:是否使用局部空间方向作为初速度。
  • 重力影响
    • ProjectileGravityScale:重力缩放系数(0 = 无重力)。
  • 弹跳与摩擦
    • bShouldBounce:是否启用反弹。
    • Bounciness:弹性系数(0~1)。
    • Friction:摩擦系数,控制反弹后速度衰减。
  • 生命周期
    • 可通过 Actor 的 InitialLifeSpan 设置生存时间,到期自动销毁。
  • 事件
    • OnProjectileStop:投射物停止时触发。
    • OnProjectileBounce:发生弹跳时触发。

🛠️ 常见配置

  • InitialSpeed = 3000.f
  • MaxSpeed = 3000.f
  • ProjectileGravityScale = 1.f(默认有重力,可改成 0)
  • bShouldBounce = true(是否启用弹跳)
  • Bounciness = 0.3f(反弹时保留速度比例)

📝 使用方法

1) 在 Actor 中添加组件

// MyProjectile.h
UPROPERTY(VisibleAnywhere, Category="Movement")
UProjectileMovementComponent* ProjectileMovement;

// MyProjectile.cpp
ProjectileMovement = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("ProjectileMovement"));
ProjectileMovement->InitialSpeed = 3000.f;
ProjectileMovement->MaxSpeed = 3000.f;
ProjectileMovement->bRotationFollowsVelocity = true;
ProjectileMovement->ProjectileGravityScale = 0.f; // 取消重力


2) 发射时设置方向

void AMyProjectile::FireInDirection(const FVector& ShootDir)
{
    ProjectileMovement->Velocity = ShootDir * ProjectileMovement->InitialSpeed;
}


3) 绑定事件

ProjectileMovement->OnProjectileBounce.AddDynamic(this, &AMyProjectile::OnBounce);
ProjectileMovement->OnProjectileStop.AddDynamic(this, &AMyProjectile::OnStop);

void AMyProjectile::OnBounce(const FHitResult& ImpactResult, const FVector& ImpactVelocity)
{
    UE_LOG(LogTemp, Warning, TEXT("Projectile bounced!"));
}

void AMyProjectile::OnStop(const FHitResult& ImpactResult)
{
    Destroy(); // 停止时销毁
}


📚 典型应用场景

  • 🔫 子弹/火箭弹:高速直线飞行,可带重力或无重力。
  • 💣 手雷/投掷物:受重力影响,形成抛物线。
  • 🔮 魔法技能:火球、冰锥,可开启弹跳与特效。
  • 🎯 AI 投射物:怪物发射的石头、毒液、能量波。

🔁 与其他组件对比

组件 特点 适用场景
UFloatingPawnMovement 输入驱动,悬浮式移动,不受重力 玩家飞行器/观战相机
UCharacterMovementComponent 完整步行/跳跃/地面逻辑 玩家/NPC角色
UProjectileMovementComponent 自动运动,支持重力/反弹,专为抛射物设计 子弹/手雷/魔法弹
URotatingMovementComponent 固定角速度旋转 机关/旋转装饰

📦 小结

  • UProjectileMovementComponent = 抛射物的飞行控制器
  • ✅ 自动更新位置与方向
  • ✅ 支持速度、重力、弹跳、摩擦
  • ✅ 自带事件(Bounce/Stop)方便逻辑扩展
  • ✅ 适合子弹、火箭、手雷、魔法等所有“飞出去的东西”

Logo

惟楚有才,于斯为盛。欢迎来到长沙!!! 茶颜悦色、臭豆腐、CSDN和你一个都不能少~

更多推荐