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

Ursina FirstPersonController按住Shift/Ctrl时无法跳跃问题求助

Ursina FirstPersonController 按住Shift/Ctrl时无法跳跃的解决方案

可能的原因

Ursina默认的FirstPersonController跳跃逻辑依赖input事件触发,部分场景下按住Shift/Ctrl时,空格键的输入检测可能存在优先级冲突,或是下蹲(Ctrl)导致碰撞盒变化,使grounded(是否在地面)判断异常。

解决方法

方法1:重写input方法强制处理跳跃

继承默认控制器,手动添加不受Shift/Ctrl影响的跳跃逻辑:

from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController

class CustomFPSController(FirstPersonController):
    def input(self, key):
        # 执行父类默认输入处理(含奔跑、下蹲逻辑)
        super().input(key)
        
        # 强制触发跳跃:按下空格且在地面时执行跳跃
        if key == 'space' and self.grounded:
            self.y_velocity = self.jump_height
            self.grounded = False
            # 短暂延迟后恢复地面状态,防止空中连跳
            invoke(setattr, self, 'grounded', True, delay=0.1)

# 使用自定义控制器替代默认的FirstPersonController
player = CustomFPSController()

方法2:在update循环中持续检测跳跃输入

若input事件检测存在冲突,可在每帧更新时直接检测按键状态:

class CustomFPSController(FirstPersonController):
    def update(self):
        super().update()
        
        # 每帧检测:按住空格且在地面时触发跳跃
        if held_keys['space'] and self.grounded:
            self.y_velocity = self.jump_height
            self.grounded = False
            invoke(setattr, self, 'grounded', True, delay=0.1)

方法3:调整碰撞盒修正地面检测

如果是下蹲(Ctrl)导致碰撞盒偏移,使grounded误判,可修改碰撞盒参数:

class CustomFPSController(FirstPersonController):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 调整碰撞盒位置与大小,避免下蹲时脱离地面检测范围
        self.collider = BoxCollider(self, center=(0,0.5,0), size=(1,1,1))
        
    def input(self, key):
        super().input(key)
        # 自定义跳跃逻辑(同方法1)
        if key == 'space' and self.grounded:
            self.y_velocity = self.jump_height
            self.grounded = False
            invoke(setattr, self, 'grounded', True, delay=0.1)

验证步骤

  1. 运行自定义控制器代码,测试按住Shift/Ctrl+空格是否能正常跳跃。
  2. 若问题仍存在,在input或update方法中添加print(held_keys),确认空格键输入是否被正确捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:55:25