如何在Ursina引擎中实现Bunny Hop(兔子跳)机制?
如何在Ursina引擎中实现Bunny Hop(兔子跳)机制?
嘿,我来帮你搞定Ursina里的兔子跳机制!这玩意儿在FPS游戏里超带感,咱们一步步实现你要的功能——按住空格持续跳跃、按W时每次跳跃叠加速度,还额外给你加上可选的 Strafing(左右横移)加速逻辑:
核心思路拆解
- 取消默认的「落地才能跳」限制,改成按住空格就触发跳跃动作
- 每次跳跃时,如果按住W,就给角色叠加向前的速度
- 可选优化:按住A/D横移时,同步叠加侧向速度,模拟真实Bunny Hop的 Strafing 加速效果
完整代码实现
咱们直接基于Ursina的FirstPersonController来修改,这样能省掉很多基础的移动逻辑:
from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController class BunnyHopController(FirstPersonController): def __init__(self, **kwargs): super().__init__(**kwargs) # 自定义参数,可根据手感调整 self.jump_force = 8 # 跳跃高度 self.speed_increment = 0.5 # 每次跳跃的速度增量 self.strafe_increment = 0.3 # 横移加速的增量 self.max_speed = 30 # 最大速度限制,防止速度无限叠加 def update(self): super().update() # 保留原有的视角、基础移动逻辑 # 处理按住空格持续跳跃 if held_keys['space']: # 给角色向上的力,实现跳跃 self.y_velocity = self.jump_force self.position.y += self.y_velocity * time.dt # 按W时,叠加向前速度 if held_keys['w']: forward_dir = self.forward * self.speed_increment self.velocity += forward_dir # 限制最大速度 if self.velocity.length() > self.max_speed: self.velocity = self.velocity.normalized() * self.max_speed # 可选:Strafing横移加速(按住A/D时生效) if held_keys['a']: left_dir = self.left * self.strafe_increment self.velocity += left_dir if self.velocity.length() > self.max_speed: self.velocity = self.velocity.normalized() * self.max_speed if held_keys['d']: right_dir = self.right * self.strafe_increment self.velocity += right_dir if self.velocity.length() > self.max_speed: self.velocity = self.velocity.normalized() * self.max_speed # 让角色始终保持移动惯性(默认FirstPersonController松开W会减速,这里改成保留惯性) # 如果需要松开W后慢慢减速,可以把下面的注释打开,调整drag值 # self.velocity *= 0.98 app = Ursina() # 创建场景 Ground(scale=64, texture='grass', texture_scale=(4,4)) Sky() # 生成自定义的兔子跳控制器 player = BunnyHopController() app.run()
关键细节说明
- 持续跳跃逻辑:通过检测
held_keys['space'],每次update都给角色向上的y_velocity,实现按住空格一直跳的效果 - W键加速:每次跳跃时,把速度向量向角色当前视角的前方叠加,同时加了
max_speed防止速度无限飙升 - Strafing加速:同理,按住A/D时向左右方向叠加速度,模拟真实Bunny Hop里通过横移提速的技巧
- 惯性保留:默认代码里去掉了减速逻辑,角色会一直保持速度;如果想要更贴近真实物理的减速效果,可以打开
self.velocity *= 0.98这行注释,调整数值控制减速快慢
你可以根据自己的手感调整jump_force、speed_increment这些参数,比如把jump_force调小一点会更贴近CS里的兔子跳手感~
备注:内容来源于stack exchange,提问作者Вадим Малютин
相关产品推荐
相关产品推荐

