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

Unity方形角色跳跃旋转与跳跃高度冲突的技术问题求助

问题分析与修复方案

跳跃高度异常的核心原因

你现在的问题和旋转动画无关,是代码里的物理控制逻辑出了问题:

  1. 直接用Transform.Translate移动角色:这会绕过Rigidbody2D的物理模拟,强行修改位置,和Rigidbody的velocity产生冲突,导致跳跃的竖直速度被干扰,看起来高度变低。
  2. 跳跃时清空水平速度:Jump()里把velocity的x设为0,不仅让跳跃时人物突然停住,还会打乱物理引擎的速度计算,进一步压低跳跃高度。
  3. isGrounded判断逻辑有缺陷:OnCollisionExit2D只要离开任何碰撞就设为false,比如角色站在两个方块上,离开其中一个就会误判为浮空,导致无法再次跳跃。

修复后的代码

using UnityEngine;

public class MoveScript : MonoBehaviour
{
    private bool isGrounded = true;
    public float walkSpeed = 5;
    public float jumpHeight = 7;
    public Rigidbody2D myRigidBody;
    public Animator myAnimator;

    void Start()
    {
        // 冻结Rigidbody的旋转,确保动画旋转不会影响物理模拟
        myRigidBody.freezeRotation = true;
    }

    // 用Stay判断接地,确保只有完全离开地面才会设为false
    void OnCollisionStay2D(Collision2D col)
    {
        // 检查碰撞是否来自下方(简单判断接触点的法线方向)
        foreach (ContactPoint2D contact in col.contacts)
        {
            if (contact.normal.y > 0.7f) // 法线向上,说明是地面
            {
                isGrounded = true;
                return;
            }
        }
    }

    void OnCollisionExit2D(Collision2D col)
    {
        isGrounded = false;
    }

    void Update()
    {
        // 用Rigidbody的velocity控制水平移动,符合物理规则
        Vector2 currentVelocity = myRigidBody.velocity;
        currentVelocity.x = walkSpeed;
        myRigidBody.velocity = currentVelocity;

        if (Input.GetMouseButtonDown(0) && isGrounded)
        {
            Jump();
            myAnimator.SetTrigger("RotateTrigger");
        }
    }

    void Jump()
    {
        // 保留水平速度,只修改竖直速度
        Vector2 currentVelocity = myRigidBody.velocity;
        currentVelocity.y = jumpHeight;
        myRigidBody.velocity = currentVelocity;
    }
}

关键修改点说明

  • 冻结Rigidbody旋转:在Start里设置freezeRotation = true,这样动画修改角色的视觉旋转时,不会影响Rigidbody的物理状态,彻底避免旋转和跳跃的冲突。
  • 改用Rigidbody.velocity移动:不再用Translate直接改位置,让物理引擎统一处理移动和跳跃,避免逻辑冲突。
  • 跳跃保留水平速度:跳跃时只修改y轴速度,x轴保持行走速度,更符合游戏逻辑,也不会干扰物理计算。
  • 优化接地判断:通过碰撞接触点的法线方向判断是否真的站在地面上,避免误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:25:07