UE4 C++碰撞检测(OnHit)

H头文件中


    UFUNCTION()
        void YourFunction(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComponent, FVector NormalImpulse, const FHitResult& Hit);

CPP文件中

Box->OnComponentHit.AddDynamic(this, &AMyActor::YourFunction);
void AMyActor::YourFunction(UPrimitiveComponent * HitComponent, AActor * OtherActor, UPrimitiveComponent * OtherComponent, FVector NormalImpulse, const FHitResult & Hit)
{

    GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Red, Hit.GetActor()->GetName());
}

如果没实现碰撞功能则设置,物体碰撞类型为挡住所有物体

    Box->SetCollisionProfileName(TEXT("BlackAll"));

可参考我的另一篇文章碰撞检测(Overlap)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现子弹攻击扣血的大致思路如下: 1. 在子弹和敌人的脚本中分别添加变量 bulletDamage 和 enemyHealth,表示子弹攻击力和敌人当前血量。 2. 当子弹与敌人发生碰撞时,先判断碰撞对象是否为敌人,如果是则调用敌人的 OnHit 方法。 3. 在 OnHit 方法中,根据子弹攻击力 bulletDamage 计算出敌人扣除的血量,并更新 enemyHealth 变量。 4. 在敌人脚本中添加 UpdateHealth 方法,用于更新敌人的血条显示。 下面是一个简单的示例代码: ```csharp // 子弹脚本 public class Bullet : MonoBehaviour { public int bulletDamage; // 子弹攻击力 void OnCollisionEnter(Collision collision) { // 判断碰撞对象是否为敌人 if (collision.gameObject.CompareTag("Enemy")) { Enemy enemy = collision.gameObject.GetComponent<Enemy>(); enemy.OnHit(bulletDamage); Destroy(gameObject); // 销毁子弹对象 } } } // 敌人脚本 public class Enemy : MonoBehaviour { public int enemyHealth; // 敌人当前血量 public Slider healthSlider; // 血条显示控件 void Start() { healthSlider.value = enemyHealth; // 初始化血条显示 } // 子弹攻击敌人时调用 public void OnHit(int damage) { enemyHealth -= damage; // 扣除血量 UpdateHealth(); // 更新血条显示 if (enemyHealth <= 0) { Destroy(gameObject); // 敌人死亡 } } // 更新血条显示 void UpdateHealth() { healthSlider.value = enemyHealth; } } ``` 在 Unity 中使用该脚本,只需将 Bullet 和 Enemy 脚本分别挂载到子弹和敌人对象上,并将敌人对象的 healthSlider 变量设置为一个 UI Slider 控件即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值