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

Unity角色重力下落失效求助:调整代码后仍无效果

Unity角色重力下落失效的排查方案
  • 物理组件配置检查

    • 若使用Rigidbody:务必取消勾选Is Kinematic,并将Gravity Scale设为1(或符合需求的正数)。如果通过代码实现重力,要用rb.AddForce(Physics.gravity * rb.mass, ForceMode.Force)或直接修改rb.velocity,不要直接改动transform.position。
    • 若使用CharacterController:Unity不会自动应用重力,必须手动计算垂直速度。示例逻辑:
      float verticalVelocity;
      CharacterController controller;
      
      void Update()
      {
          verticalVelocity += Physics.gravity.y * Time.deltaTime;
          // 地面检测:碰到地面时重置垂直速度
          if (controller.isGrounded) verticalVelocity = 0f;
          controller.Move(new Vector3(0, verticalVelocity, 0) * Time.deltaTime);
      }
      
  • 代码末尾逻辑修正

    • 避免用transform.position += new Vector3(0, -gravity, 0) * Time.deltaTime这类写法,这会跳过物理引擎,直接抵消重力效果。如果用Rigidbody,优先使用物理引擎提供的方法;如果用CharacterController,必须通过Move/SimpleMove更新位置。
    • 检查是否有代码强制锁定角色Y轴位置,比如transform.position = new Vector3(transform.position.x, fixedY, transform.position.z),这类逻辑会直接阻止角色下落。
  • 碰撞与层级验证

    • 地面必须添加非触发器的Collider组件(如BoxCollider),角色的Collider也要正常启用,且两者的碰撞矩阵在Physics Settings中设置为允许碰撞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:55:19