You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2D实现子弹触地自动销毁问题求助

Unity 2D敌人子弹触地自动销毁方案

要让子弹触碰到地面时立刻销毁,你需要添加碰撞检测逻辑,配合原有的超时销毁完善功能,具体步骤如下:

1. 配置地面碰撞体

  • 给地面GameObject添加Collider2D组件(比如BoxCollider2D),若使用物理碰撞检测,不要勾选Is Trigger;若勾选Is Trigger,后续需改用触发器检测方法。
  • 给地面设置标签为Ground(在Inspector面板的Tag下拉框中选择或创建)。

2. 修改EnemyBullet脚本

在原有代码基础上添加碰撞检测方法,检测到地面时立即销毁子弹:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyBullet : MonoBehaviour
{
    GameObject target;
    public float speed;
    Rigidbody2D bulletRB;

    void Start()
    {
        bulletRB = GetComponent<Rigidbody2D>();
        target = GameObject.FindGameObjectWithTag("Player");
        Vector2 moveDir = (target.transform.position - transform.position).normalized * speed;
        bulletRB.velocity = new Vector2(moveDir.x, moveDir.y);
        // 保留超时销毁作为保底,避免子弹永久存在
        Destroy(this.gameObject, 2);
    }

    // 物理碰撞检测(地面未勾选Is Trigger时使用)
    void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.CompareTag("Ground"))
        {
            Destroy(gameObject);
        }
    }

    // 若地面勾选了Is Trigger,替换上面的方法使用这个
    // void OnTriggerEnter2D(Collider2D other)
    // {
    //     if (other.CompareTag("Ground"))
    //     {
    //         Destroy(gameObject);
    //     }
    // }
}

注意事项

  • 确保子弹的Rigidbody2D组件未勾选Is Kinematic,否则无法触发物理碰撞。
  • 若需要让子弹碰到玩家、障碍物等也销毁,可在碰撞检测方法中添加对应标签的判断逻辑。

内容的提问来源于stack exchange,提问作者6virus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:48:14