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

如何通过鼠标滚轮控制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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:34:55