Unity基础学习(九)输入系统全解析:鼠标、键盘与轴控制

目录

一、Input类

[1. 鼠标输入](#1. 鼠标输入)

[2. 键盘输入](#2. 键盘输入)

[3. 默认轴输入](#3. 默认轴输入)

[(1) 基础参数](#(1) 基础参数)

(2)按键绑定参数

(3)输入响应参数

(4)输入类型与设备参数

(5)不同类型轴的参数差异

[4. 其他输入设备](#4. 其他输入设备)

二、屏幕相关

[Unity Screen 类常用功能总结](#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 时停止。通用性 :仅对需要方向冲突处理的轴有意义(如 HorizontalVertical)。

Invert(✓)

作用 :反转输入方向(正负值互换)。示例 :默认 Mouse Y 向上移动为正值,勾选后向下移动为正值。通用性 :适用于需要反向操作的轴(如视角控制)。


(4)输入类型与设备参数

Type

作用:定义输入源类型。

选项

Joystick Axis :手柄摇杆或触发器(如 Horizontal 绑定手柄左摇杆)。

Mouse Movement :鼠标移动(如 Mouse XMouse 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(无过渡)。

    演示代码:

cs 复制代码
    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.gravitygyro.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 结构体,包含 widthheight
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)移动端不推荐使用
相关推荐
s1ckrain11 分钟前
嵌入式操作系统学习笔记
学习·嵌入式·ucosii
jackson凌14 分钟前
【Java学习笔记】finalize方法
java·笔记·学习
能来帮帮蒟蒻吗25 分钟前
VUE3 -综合实践(Mock+Axios+ElementPlus)
前端·javascript·vue.js·笔记·学习·ajax·typescript
o(╥﹏╥)30 分钟前
绑定 SSH key(macos)
开发语言·git·学习·macos
XQ丶YTY1 小时前
大二java第一面小厂(挂)
java·开发语言·笔记·学习·面试
Always_away1 小时前
数据库系统概论|第七章:数据库设计—课程笔记
数据库·笔记·sql·学习
东京老树根1 小时前
SAP学习笔记 - 开发08 - Eclipse连接到 BTP Cockpit实例
笔记·学习
lichuangcsdn2 小时前
【springcloud学习(dalston.sr1)】Eureka单个服务端的搭建(含源代码)(三)
学习·spring cloud·eureka
靡樊2 小时前
网络基础概念
linux·服务器·网络·c++·学习
郭尘帅6663 小时前
vue3基础学习(上) [简单标签] (vscode)
前端·vue.js·学习