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

Unity中AOE自爆动画循环异常及Hitbox失效问题求助

问题解决:AOE爆炸动画循环、Hitbox失效及触发键修改方案

一、触发键改为E键的修改

直接替换输入检测逻辑,把原来的鼠标中键检测改成E键:

// 替换Update方法里的输入判断
if (Input.GetKeyDown(KeyCode.E))

二、动画无限循环修复

从你提供的Animator截图来看,重点检查以下两点:

  • 爆炸动画片段的循环设置:选中爆炸动画片段,在Inspector面板中把Loop Time选项取消勾选,确保动画播放一次后自动停止,不会循环。
  • Animator过渡条件:检查爆炸动画回到默认/idle状态的过渡规则,确保没有设置始终为true的过渡条件(比如误加了true作为过渡条件),同时可以关闭过渡的Has Exit Time,或者设置合理的退出时间,避免动画还没播放完就强制过渡回去,或者无限循环触发。

三、Hitbox完全失效的修复

你的代码和设置存在几个关键问题,逐一修正:

  1. 协程启动逻辑错误:CooldownNoHit()协程被放在CanAoE判断外,导致即使技能处于冷却,每次按键都会启动协程,多次重置isAoE状态,干扰Hitbox检测。需要把协程启动移到CanAoE为true的分支内。
  2. 碰撞检测事件类型错误:AOE技能通常使用触发碰撞而非物理碰撞,把OnCollisionEnter2D替换为OnTriggerEnter2D,同时确保Hitbox的Collider2D组件勾选了Is Trigger选项。
  3. 变量状态冲突:原代码中重复设置isAoE=true,优化逻辑避免冗余。

修改后的完整代码

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

public class AoESelfDetonate : MonoBehaviour
{
    public bool CanAoE = true;
    public bool isAoE = false;
    public float AoECoolDown = 5f;
    private Animator anim; // 提前缓存Animator组件,避免重复获取

    void Start()
    {
        anim = GetComponent<Animator>(); // 初始化时获取组件
    }

    void Update()
    {
        // 改为E键触发
        if (Input.GetKeyDown(KeyCode.E))
        {
            Debug.Log("Button Down");
            
            if (CanAoE)
            {
                Debug.Log("Can AoE");

                CanAoE = false;
                isAoE = true;
                anim.SetTrigger("Explode");

                StartCoroutine(ResetAttackCooldown());
                StartCoroutine(CooldownNoHit()); // 移到CanAoE判断内
            }
        }
    }

    // 替换为Trigger事件
    void OnTriggerEnter2D(Collider2D collision) 
    {
        Debug.Log("On Hit");

        if (collision.gameObject.CompareTag("Enemy") && isAoE) 
        { 
            Destroy(collision.gameObject);
            Debug.Log("On Destroy");
        } 
    }

    IEnumerator ResetAttackCooldown()
    {
        yield return new WaitForSeconds(AoECoolDown);
        CanAoE = true;
    }

    IEnumerator CooldownNoHit()
    {
        yield return new WaitForSeconds(0.60f);
        isAoE = false;
    }
}

额外调试建议

  • 在OnTriggerEnter2D中输出isAoE的值,确认检测时状态是否正确。
  • 检查Hitbox的碰撞层设置,确保和Enemy所在的层级在Physics2D设置中是可以相互检测的。
  • 在Animator窗口中开启Debug模式,实时查看参数和动画状态的切换,确认"Explode"触发后动画是否正常播放一次并回到默认状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:15:05