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

Unity中Tilemap上敌人仅特定速度下滑动推人问题求助

问题根源与修复方案

你的核心问题是直接通过Vector2.MoveTowards修改transform位置的方式,绕过了Unity物理系统的控制,所以你尝试归零速度的操作完全无效——因为这种位移是强制的,和刚体速度无关。当敌人进入攻击状态时,之前的移动帧已经给了位移,加上碰撞体的交互,就会带着玩家滑动。

以下是具体修复方法:

1. 改用Rigidbody2D控制移动(推荐方案)

这是最符合Unity物理逻辑的做法,能从根源解决滑动问题:

  • 给敌人添加Rigidbody2D组件,根据需求设置为Kinematic(不需要受重力等物理影响)或Dynamic(需要物理交互)
  • 替换原有的移动代码:
    // 先在类中定义Rigidbody2D引用:private Rigidbody2D m_rb;
    // Awake中初始化:m_rb = GetComponent<Rigidbody2D>();
    
    // 移动逻辑修改为
    if (m_target != null && Vector2.Distance(transform.position, m_target.transform.position) <= m_targetRange && !m_isAttacking)
    {
        Vector2 direction = (m_target.transform.position - transform.position).normalized;
        // Kinematic刚体用MovePosition
        m_rb.MovePosition(transform.position + (Vector3)direction * m_speed * Time.deltaTime);
        // 如果是Dynamic刚体,改用velocity控制
        // m_rb.velocity = direction * m_speed;
    }
    
  • 进入攻击状态时,直接终止刚体的移动:
    if (m_target != null && Vector2.Distance(transform.position, m_target.transform.position) <= m_attackRange && m_timeSinceLastAttack >= m_attackRate && !m_isAttacking)
    {
        m_isAttacking = true;
        m_timeSinceLastAttack = 0;
        // 立即停止移动
        m_rb.velocity = Vector2.zero;
        // 如果是Kinematic刚体,不需要这行,停止调用MovePosition就会静止
    }
    

2. 若坚持使用transform直接移动(不推荐)

在攻击状态下彻底锁定位移,避免残留动量:

  • 在Update中添加攻击状态下的位置锁定逻辑:
    if (m_isAttacking)
    {
        // 将敌人固定在与玩家保持攻击距离的位置,避免碰撞重叠
        Vector2 direction = (m_target.transform.position - transform.position).normalized;
        transform.position = m_target.transform.position - direction * m_attackRange;
    }
    

3. 优化攻击状态的判断逻辑

当前用normalizedTime > 1判断动画结束存在帧延迟,建议改用动画事件:

  • 在敌人的攻击动画最后一帧添加动画事件,调用自定义方法设置m_isAttacking = false,确保攻击状态的切换精准无延迟

4. 物理层与材质补充

  • 检查敌人和玩家的碰撞层设置,确保仅必要层之间发生碰撞
  • 若使用Dynamic刚体,给敌人的Collider2D添加高摩擦力的物理材质,进一步抑制滑动

内容的提问来源于stack exchange,提问作者Dennis Groß

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24