Unity 3D FPS游戏C#二段跳功能异常 跳跃高度不符合预期求助
问题排查
- 核心错误是二段跳的判断逻辑嵌套在了地面起跳的判定分支内,单次按下空格触发地面跳跃时,会同时命中内层的二段跳判定,直接同时叠加两段跳跃力,所以总高度直接达到800
- 缺少空中触发二段跳的独立判定逻辑,当前代码完全不支持在空中按空格触发二段跳的功能
- 代码中
secondJunp属于拼写错误,需和你定义的二段跳力变量名保持一致
修正后的实现代码
提前确认变量赋值:jumpForce = 500、secondJumpForce = 300、maxJumpCount = 2,替换原有逻辑即可:
void Start() { rig = GetComponent<Rigidbody>(); } void Update() { //按键判定 bool jump = Input.GetKeyDown(KeyCode.Space); //状态判定 bool isGrounded = Physics.CheckSphere(groundDetector.position, 0.1f, ground); bool isSneaking = sneak; bool isSliding = !isSneaking && slide && !slideing && !slideStop && isGrounded; if (isGrounded) { print("vallah"); jumpCount = 0; } //跳跃触发逻辑 if (jump && jumpCount < maxJumpCount && !isSliding && !isSneaking) { //可选:清空垂直方向速度,避免下落时二段跳力度被抵消,可根据手感调整 rig.velocity = new Vector3(rig.velocity.x, 0f, rig.velocity.z); float currentJumpForce = jumpCount == 0 ? jumpForce : secondJumpForce; //增加Impulse参数,保证力为瞬间施加,符合跳跃物理表现 rig.AddForce(Vector3.up * currentJumpForce, ForceMode.Impulse); jumpCount++; } }
内容的提问来源于stack exchange,提问作者Marcello Greulich
相关产品推荐
相关产品推荐

