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

Unity中2D简单近战攻击实现失败问题求助

Unity中2D简单近战攻击实现失败问题求助

兄弟,我太懂你这种刚做近战攻击踩坑的感觉了!咱们一步步拆解你的问题,帮你搞定这个简单的敌人销毁逻辑~

先说说你当前代码和操作里的几个核心问题:

  • 销毁对象的代码写错了:你现在Destroy(other)销毁的是碰撞体组件,不是敌人整个游戏对象!得改成Destroy(other.gameObject)才会把敌人删掉。
  • 触发检测的前提没满足:OnTriggerEnter(2D项目要对应OnTriggerEnter2D)能触发的话,必须同时满足这几个条件:
    • 攻击方(比如你的剑)和敌人都有对应的碰撞体组件(3D用Collider,2D用Collider2D)
    • 其中至少一个碰撞体勾了「Is Trigger」选项
    • 双方中至少有一个对象带刚体组件(3DRigidbody/2DRigidbody2D),而且不能是静态对象(静态的话触发检测会失效)
  • 动画事件的用法错了:你不能直接把脚本“挂”到动画事件上,动画事件是用来在动画播放到指定帧时调用脚本里的公开方法的,不是挂载脚本的载体。

给你一套能跑通的实现方案,兼顾你想“只在挥剑时生效”的需求:

1. 先调整你的脚本(以3D为例,2D的话把组件换成2D版本就行)

public class SwordAttack : MonoBehaviour
{
    private Collider _attackHitbox;

    void Awake()
    {
        // 获取攻击碰撞体,一开始默认禁用
        _attackHitbox = GetComponent<Collider>();
        _attackHitbox.enabled = false;
    }

    // 给动画事件调用的方法:开启攻击判定
    public void EnableAttackHitbox()
    {
        _attackHitbox.enabled = true;
    }

    // 给动画事件调用的方法:关闭攻击判定
    public void DisableAttackHitbox()
    {
        _attackHitbox.enabled = false;
    }

    void OnTriggerEnter(Collider other)
    {
        // 加个标签判断,避免误销毁自己或其他友方单位
        if (other.CompareTag("Enemy"))
        {
            Destroy(other.gameObject);
            // 以后要加死亡动画、击退的话,直接在这里加逻辑就行
        }
    }
}

2. 场景里的设置步骤

  • 给你的剑(或者玩家身上负责攻击判定的部位)加一个Collider(比如BoxCollider),勾上「Is Trigger」
  • 给剑或者玩家对象加一个Rigidbody(2D的话用Rigidbody2D),如果是玩家的刚体,记得别设为静态
  • 把上面的脚本挂到剑的GameObject上
  • 打开你的挥剑动画Clip,在动画刚挥出去的帧添加动画事件:选择剑对象上的SwordAttack脚本,调用EnableAttackHitbox;在动画挥剑结束的帧添加动画事件,调用DisableAttackHitbox

关于你纠结的几个点:

  • 要不要写到玩家主脚本里?完全没必要,把攻击逻辑封装在单独的SwordAttack脚本里更清晰,玩家脚本只需要负责播放攻击动画就行,剩下的交给动画事件触发。
  • 能不能不做单独的Hitbox?理论上可以,但你得把玩家的碰撞体平时禁用,攻击时再开启,但这样很容易影响玩家平时的移动碰撞(比如走路时穿模),还是单独做一个剑的Hitbox更稳妥,也更灵活。

最后提醒下:如果是2D项目,一定要把所有组件换成2D版本(比如Collider2D、OnTriggerEnter2D、Rigidbody2D),别把3D和2D的组件搞混,很多新手都栽在这里!

备注:内容来源于stack exchange,提问作者tai an Zhou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:48:10