Unity基础学习(九)输入系统全解析:鼠标、键盘与轴控制
目录
一、Input类
1. 鼠标输入
2. 键盘输入
3. 默认轴输入
(1) 基础参数
(2)按键绑定参数
(3)输入响应参数
(4)输入类型与设备参数
(5)不同类型轴的参数差异
4. 其他输入设备
二、屏幕相关
Unity Screen 类常用功能总结
一、Input类
1. 鼠标输入
-
位置获取
Input.mousePosition
:返回屏幕坐标(左下角为原点,x向右,y向上,z始终为0)。 -
按键检测
GetMouseButtonDown(0/1/2)
:左键/右键/中键按下瞬间触发。GetMouseButtonUp(0/1/2)
:按键抬起时触发。GetMouseButton(0/1/2)
:按键持续按住时触发。 -
滚轮检测
Input.mouseScrollDelta
:y值为1
(向上滚动)或-1
(向下滚动),用于控制缩放或页面滚动。
2. 键盘输入
-
按键检测
GetKeyDown(KeyCode.W)/GetKeyDown("q")
:按下瞬间触发(字符串需小写)。GetKeyUp(KeyCode.W)
:抬起时触发。GetKey(KeyCode.W)
:持续按住时触发。想什么键就KeyCode.出来使用,这里面是一个枚举类型,枚举了所有的按键。
-
组合键:需自行检测多键状态,如
if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.C))
。
3. 默认轴输入
这个轴在这里看:Edit->Project Setting->Input Manager
这个轴是什么呢?在 Unity 的 Input Manager 中,轴(Axes) 是一组预定义的输入配置,用于抽象化不同的输入设备(如键盘、鼠标、手柄)的操作。
如果你想自己添加额外的轴,你直接将上面的Size进行改动即可
这里是对上面的介绍:
轴名称 | 作用 | 默认输入键 | 代码示例 |
---|---|---|---|
Horizontal | 控制左右方向(如角色移动、菜单选择) | 键盘 A/D 、手柄左摇杆左右 | Input.GetAxis("Horizontal") |
Vertical | 控制上下方向(如角色移动、菜单选择) | 键盘 W/S 、手柄左摇杆上下 | Input.GetAxis("Vertical") |
Fire1 | 触发攻击、交互等动作 | 鼠标左键、键盘 Ctrl 、手柄 X 键 | Input.GetButton("Fire1") |
Fire2 | 次要攻击或特殊技能(如射击游戏中的瞄准) | 鼠标右键、键盘 Alt 、手柄 Y 键 | Input.GetButton("Fire2") |
Fire3 | 备用功能(如手雷或道具使用) | 键盘 Space 、手柄 B 键 | Input.GetButton("Fire3") |
Jump | 跳跃动作 | 键盘 Space 、手柄 A 键 | Input.GetButtonDown("Jump") |
Mouse X | 鼠标横向移动(控制视角左右旋转) | 鼠标左右移动 | Input.GetAxis("Mouse X") |
Mouse Y | 鼠标纵向移动(控制视角上下旋转) | 鼠标上下移动 | Input.GetAxis("Mouse Y") |
Mouse ScrollWheel | 鼠标滚轮滚动(如缩放镜头、切换武器) | 鼠标滚轮 | Input.GetAxis("Mouse ScrollWheel") |
Submit | 确认操作(如菜单按钮点击) | 键盘 Enter 、手柄 Start 键 | Input.GetButtonDown("Submit") |
Cancel | 取消操作(如返回上一级菜单) | 键盘 Esc 、手柄 Back 键 | Input.GetButtonDown("Cancel") |
随便点击一个轴,可以看出里面有很多参数:
所以我们来看看这些参数是什么:
(1) 基础参数
Name:
作用:轴的唯一标识符,代码中通过 Input.GetAxis("轴名") 或 Input.GetButton("轴名") 调用。通用性:所有轴必填,需唯一。例如 Horizontal、Fire1、Mouse X。
Descriptive Name / Negative Descriptive Name
作用:编辑器中的显示名称(仅用于界面提示,不影响功能)。通用性:所有轴可选,通常留空。
(2)按键绑定参数
Negative Button / Positive Button
作用:负方向(减少值)和正方向(增加值)的按键绑定。
适用轴类型:
按键触发轴(如 Fire1
):通常只绑定一个键(如 Ctrl
),负按钮可能留空。
连续轴(如 Horizontal
):绑定 A/D
或 ←/→
。
注意:某些轴(如 Mouse X
)可能不需要手动绑定按键(由输入类型决定)。
Alt Negative Button / Alt Positive Button
作用:备用按键绑定(兼容多设备或键位布局)。
示例:Horizontal
可同时支持方向键 ←/→
和 A/D
。适用性:仅对需要多键位支持的轴有意义(如移动、菜单操作)。
小结:就是说,Unity会识别你上面这两种输入方式,只要满足一种,就都会判定为是轴触发。主按键(Negative/Positive Button)和备用按键(Alt Negative/Alt Positive Button)是并行生效的,没有优先级差异。
(3)输入响应参数
Gravity
作用:松开按键后,轴值归零的速度(单位:单位/秒)。
通用性:
按键触发轴(如
Jump
):通常无效(按键是瞬时触发)。连续轴(如
Horizontal
):模拟惯性停止(如角色滑行)。
默认值:3
(数值越大,归零越快)。
Dead
作用:输入死区范围,忽略微小值(防止摇杆漂移或键盘抖动)。
通用性:键盘/鼠标:通常设为
0.001
(避免误触发)。手柄摇杆:必填(如
0.2
表示摇杆偏移小于 20% 时不响应)。
Sensitivity
作用:输入灵敏度,控制轴值变化速度(单位:单位/秒)。
通用性:
按键触发轴(如
Fire1
):通常无效(按键是开关式输入)。连续轴(如
Mouse X
):数值越大,输入响应越快(如3
表示每秒达到最大值)。
Snap(✓)
作用:同时按下正负方向按键时,轴值立即归零。适用场景:角色移动中按 A+D
时停止。通用性:仅对需要方向冲突处理的轴有意义(如 Horizontal
、Vertical
)。
Invert(✓)
作用:反转输入方向(正负值互换)。示例:默认 Mouse Y
向上移动为正值,勾选后向下移动为正值。通用性:适用于需要反向操作的轴(如视角控制)。
(4)输入类型与设备参数
Type
作用:定义输入源类型。
选项:
Joystick Axis:手柄摇杆或触发器(如
Horizontal
绑定手柄左摇杆)。Mouse Movement:鼠标移动(如
Mouse X
、Mouse Y
)。Key or Mouse Button:键盘或鼠标按键(如
Horizontal
绑定A/D
)。
注意:不同类型会影响其他参数的可用性(如 Mouse Movement
无需绑定按键)。
Axis
作用:指定摇杆的物理轴向(仅当 Type = Joystick Axis
时生效)。
选项:
4th/5th/6th Axis:手柄的额外输入(如油门、方向盘)。
X/Y/Z Axis:摇杆的水平、垂直或其他轴向。
Joy Num
作用:指定手柄编号(支持多手柄设备)。
选项:Joystick 1/2/3...:绑定特定手柄。Get Motion from all Joysticks:所有手柄通用。
(5)不同类型轴的参数差异
轴类型 | 关键参数 | 示例 | 注意事项 |
---|---|---|---|
连续轴 | Gravity, Sensitivity, Dead | Horizontal , Vertical | 用于模拟平滑移动(如角色控制)。 |
按键触发轴 | Negative/Positive Button | Fire1 , Jump | 瞬时触发,无需响应参数(Gravity/Sensitivity)。 |
鼠标移动轴 | Type = Mouse Movement | Mouse X , Mouse Y | 自动读取鼠标位移,无需手动绑定按键。 |
手柄摇杆轴 | Type = Joystick Axis, Axis, Dead | Horizontal (手柄左摇杆) | 需设置死区(Dead)防止漂移。 |
滚轮轴 | Type = Mouse Movement | Mouse ScrollWheel | 输入值为滚轮滚动速度(Input.mouseScrollDelta )。 |
小结:如果你的输入是一定范围的值 就获取轴,如果知识点击,则获取Button
-
常见轴
Horizontal
(AD键):返回-1(左)到1(右),控制左右移动。Vertical
(WS键):返回-1(下)到1(上),控制前后移动。Mouse X/Y
:鼠标移动速度,控制视角旋转。 -
方法区别
GetAxis
:平滑过渡值(如0.3)。GetAxisRaw
:直接返回-1、0、1(无过渡)。演示代码:
void Update(){Debug.Log("Horizontal的值Raw" + Input.GetAxisRaw("Horizontal"));Debug.Log("鼠标的位置的值" + Input.mousePosition);Debug.Log("获取一个开火按键" + Input.GetButton("Fire1"));Debug.Log("获取鼠标滚轮" + Input.GetAxis("Mouse ScrollWheel"));Debug.Log("获取到Mouse X" + Input.GetAxis("Mouse X"));}
4. 其他输入设备
-
任意键检测
Input.anyKey
:任意键长按。Input.anyKeyDown
:任意键按下瞬间。 -
移动设备触摸
Input.touches
:获取所有触点信息(位置、移动偏移)。TouchPhase
:触点状态(Began/Moved/Ended等)。启用多点触控:
Input.multiTouchEnabled = true
。 -
手柄
GetButton("joystick button 0")
:检测特定按钮。 -
陀螺仪
启用:
Input.gyro.enabled = true
。获取重力/旋转数据:
gyro.gravity
、gyro.rotationRate
。 -
加速度计
Input.acceleration
:获取设备加速度(需移动端支持)。
二、屏幕相关
分辨率(Resolution) 指显示设备(如屏幕、图像、摄像头)中 像素(Pixel) 的总数量,通常表示为 横向像素数 × 纵向像素数。示例:1920×1080 表示横向有 1920 个像素,纵向有 1080 个像素,总像素数为 2,073,600(约 200 万像素)。
单位:像素(Pixel),缩写为 px。
类型 | 描述 | 示例 |
---|---|---|
物理分辨率 | 显示设备的实际像素数量(硬件固定值)。 | 手机屏幕的 2560×1440 。 |
逻辑分辨率 | 软件或系统使用的像素数量(可动态调整,如窗口模式下的分辨率)。 | Unity 中 Screen.width 。 |
像素密度(PPI) | 每英寸屏幕包含的像素数量,值越高显示越细腻(如手机屏幕 vs 电视屏幕)。 | 手机屏幕 PPI 通常 > 300。 |
宽高比 | 横向与纵向像素的比例,常见如 16:9(宽屏)、4:3(传统屏)。 | 1920×1080 的宽高比为 16:9。 |
Unity Screen 类常用功能总结
属性/方法 | 作用 | 常用性 | 注意事项 |
---|---|---|---|
Screen.currentResolution | 获取当前屏幕的物理分辨率(设备实际分辨率)。 | 常用 | 返回 Resolution 结构体,包含 width 和 height 。 |
Screen.width | 获取当前游戏窗口的宽度(非设备分辨率)。 | 常用 | 游戏运行时窗口的实际宽度,受全屏/窗口模式影响。 |
Screen.height | 获取当前游戏窗口的高度(非设备分辨率)。 | 常用 | 游戏运行时窗口的实际高度,受全屏/窗口模式影响。 |
Screen.sleepTimeout | 设置屏幕休眠模式。 | 常用 | 设为 SleepTimeout.NeverSleep 可防止屏幕休眠(移动端常用)。 |
Screen.fullScreen | 设置是否全屏运行(布尔值)。 | 不常用 | 仅控制全屏开关,不指定模式(需配合 fullScreenMode 使用)。 |
Screen.fullScreenMode | 设置全屏模式类型。 | 不常用 | 可选值: - ExclusiveFullScreen (独占全屏)- FullScreenWindow (无边框窗口全屏)- MaximizedWindow (最大化窗口)- Windowed (窗口模式)。 |
Screen.autorotateToLandscapeLeft | 允许屏幕自动转向为横屏(Home 键在左侧)。 | 不常用 | 移动端专用,需在 Player Settings 中启用自动旋转。 |
Screen.autorotateToLandscapeRight | 允许屏幕自动转向为横屏(Home 键在右侧)。 | 不常用 | 同上。 |
Screen.autorotateToPortrait | 允许屏幕自动转向为竖屏(正常方向)。 | 不常用 | 同上。 |
Screen.autorotateToPortraitUpsideDown | 允许屏幕自动转向为倒置竖屏(上下颠倒)。 | 不常用 | 同上。 |
Screen.orientation | 强制指定屏幕方向(覆盖自动旋转)。 | 不常用 | 可选值: - Portrait (竖屏)- LandscapeLeft (横屏左)等。 |
Screen.SetResolution() | 设置窗口分辨率和显示模式。 | 不常用 | 示例:SetResolution(1920, 1080, true) 或SetResolution(1920, 1080, FullScreenMode.ExclusiveFullScreen) 。移动端不推荐使用。 |