如何通过鼠标滚轮控制Ursina FirstPersonController前后移动?
Ursina引擎:用鼠标滚轮控制FirstPersonController前后移动
读取鼠标滚轮增量的方法
在Ursina中,可通过mouse.wheel属性直接获取鼠标滚轮增量:
- 滚轮向上滚动时,
mouse.wheel返回正值(通常为1) - 滚轮向下滚动时,
mouse.wheel返回负值(通常为-1)
该值会在每一帧重置,需在update方法中实时读取处理。
修改FirstPersonController实现滚轮控制
要实现仅用鼠标滚轮控制前后移动,需继承FirstPersonController并修改移动逻辑,同时禁用键盘前后移动输入:
from ursina import * from ursina.prefabs.first_person_controller import FirstPersonController class WheelControlledFPSController(FirstPersonController): def update(self): # 禁用原有键盘前后移动逻辑 self.y = 0 # 保持垂直位置固定(无需跳跃时) # 鼠标滚轮控制前后移动 forward_movement = mouse.wheel * self.speed * time.dt self.position += self.forward * forward_movement # 保留原鼠标视角控制逻辑 self.rotation_y += mouse.velocity[0] * self.mouse_sensitivity self.camera_pivot.rotation_x -= mouse.velocity[1] * self.mouse_sensitivity self.camera_pivot.rotation_x = clamp(self.camera_pivot.rotation_x, -90, 90) if __name__ == '__main__': app = Ursina() # 创建地面 Entity(model='plane', scale=64, texture='grass', collider='box') # 使用自定义控制器 player = WheelControlledFPSController() # 锁定鼠标光标,优化视角控制体验 mouse.locked = True app.run()
关键说明
- 重写
update方法时,移除了原input方法中处理键盘w/s的逻辑,改用mouse.wheel计算移动量 self.forward为控制器当前朝向向量,结合滚轮增量、移动速度与时间增量,得到每帧移动距离- 保留原鼠标视角旋转逻辑,确保正常用鼠标控制视角
- 若需调整移动速度,可修改
self.speed值,或给mouse.wheel额外乘一个系数
内容的提问来源于stack exchange,提问作者Sebo.PL
相关产品推荐
相关产品推荐

