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
相关产品推荐
相关产品推荐

