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

为何Rigidbody2D.velocity的X轴无变化但Y轴正常?

问题描述

尝试编写代码实现:挂载脚本的触发碰撞体与敌人碰撞时,通过Rigidbody2D.velocity推动敌人,根据玩家与敌人的transform.position.x位置关系决定X轴推动方向。但遇到以下问题:

  • 设置X轴velocity后无变化,Y轴设置正常生效
  • 使用AddForce()可以生效,但效果不符合需求,因此必须使用velocity
  • 将velocity替换为position测试时,Rigidbody组件可正常工作;调大velocity数值、重启电脑均无法解决问题

代码示例

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.tag == enemyTag)
    {
        if (enemy.transform.position.x > transform.position.x)
        {
            enemyRB.velocity = new Vector2(30, 0);
        }
        else { enemyRB.velocity = new Vector2(-30f, 0f); }
    }
}

测试代码

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.tag == enemyTag)
    {
        if (enemy.transform.position.x > transform.position.x)
        {
            enemyRB.position = new Vector2(30, 0);
        }
        else { enemyRB.position = new Vector2(-30f, 0f); }
    }
}
问题排查与解决方向

以下是几个最可能的原因及对应解决方法:

  • 敌人Rigidbody2D的X轴被冻结:检查敌人对象的Rigidbody2D组件,确认Constraints下的Freeze Position X未被勾选。一旦勾选,X轴的velocity设置会完全失效,Y轴不受影响。
  • 其他脚本覆盖了velocity值:检查敌人对象上的其他运动相关脚本(如AI移动脚本),如果在FixedUpdate或Update中重新设置了Rigidbody2D.velocity,会直接覆盖你在OnTriggerEnter2D中设置的值。可以调整脚本执行顺序,或者在设置velocity时加入条件判断避免被覆盖。
  • Rigidbody2D运动模式为Kinematic:如果敌人的Rigidbody2D设置为Kinematic运动模式,手动设置velocity不会对物体运动产生影响(该模式下物体运动由transform或MovePosition控制)。需将运动模式改为Dynamic。
  • enemyRB引用错误:代码中使用的enemyRB可能不是当前碰撞到的敌人的Rigidbody2D组件。建议直接从碰撞对象获取组件,避免引用错误:
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == enemyTag)
        {
            Rigidbody2D hitEnemyRB = collision.GetComponent<Rigidbody2D>();
            if (hitEnemyRB == null) return;
            
            float pushDir = collision.transform.position.x > transform.position.x ? 30f : -30f;
            hitEnemyRB.velocity = new Vector2(pushDir, hitEnemyRB.velocity.y);
        }
    }
    
  • 碰撞交互层设置问题:虽然OnTriggerEnter2D已触发,但需确认玩家层与敌人层在Project Settings > Physics 2D中设置了正确的碰撞交互,避免因层过滤导致逻辑异常(概率较低,但可排查)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:45:17