Unity玩家因脚本导致下落过慢问题求助
解决Unity玩家下落过慢的问题(脚本导致)
问题根源
你的代码中FixedUpdate里的这一行直接覆盖了Rigidbody的速度:
rb.velocity = moveDirection * speed;
由于moveDirection是通过Vector3.ProjectOnPlane计算的水平方向向量(y轴分量为0),这会把Rigidbody的y轴速度强制设为0,完全抵消了Unity物理引擎的重力效果,导致玩家下落速度异常缓慢。
修复方法
只修改速度的水平分量(x、z轴),保留原本的y轴速度(由重力控制):
// 替换原来的rb.velocity赋值行 rb.velocity = new Vector3(moveDirection.x * speed, rb.velocity.y, moveDirection.z * speed);
这样既保留了玩家的移动控制,又不会干扰重力带来的下落加速度,玩家下落速度就能恢复正常。
额外优化建议
- 斜向移动时,
moveDirection.Normalize()会让斜向移动速度和单方向移动速度一致(归一化后向量长度固定为1),如果想让斜向移动速度不超过单方向速度,可以用Vector3.ClampMagnitude替代归一化:Vector3 moveDirection = cameraForward * verticalInput + cameraRight * horizontalInput; moveDirection = Vector3.ClampMagnitude(moveDirection, 1f); // 限制向量最大长度为1 - 输入检测部分可以简化,直接用
moveDirection是否为空判断移动状态,不需要逐个检测按键:anim.SetInteger("swr", moveDirection != Vector3.zero ? 1 : 0);
内容的提问来源于stack exchange,提问作者Hlib Bondarets
相关产品推荐
相关产品推荐

