Version: Unity 6.0 (6000.0)
语言 : 中文
旧版输入
移动设备输入

Input Manager

| | |—| | 重要提示:Input Manager 是旧版功能,不建议用于新项目。对于新项目,应该使用 Input System 包 |


Input Manager 窗口中可以为项目定义输入轴及其关联操作。要访问该窗口,请从 Unity 的主菜单中转到编辑 (Edit) > 项目设置 (Project Settings),然后从右侧的导航选择 Input Manager

Input Manager 使用以下类型的控件:

  • 键 (Key) 指物理键盘上的任何键,例如 W、Shift 键或空格键。
  • 按钮 (Button) 指物理控制器(例如游戏手柄)上的任何按钮,例如远程控制器上的 X 按钮。
  • 虚拟轴 (virtual axis)(复数:virtual axes)可映射到控件,例如按钮或键。用户激活控件时,轴会收到一个介于 [–1..1] 范围内的值。您可以在脚本中使用此值。

物理键

物理键 (Physical keys) 选项允许您将键代码映射到物理键盘布局,而不是映射到语言特定的布局(可能因不同地区的用户而异)。

例如,在某些键盘上,第一行字母为“QWERTY”,在其他键盘上,第一行字母为“AZERTY”。这意味着,如果通过脚本编写特定控件以使用众所周知的“WASD”键进行移动,则这些键在 AZERTY 布局的键盘上不会处于正确的物理排列方式(如箭头键排列)。

启用物理键后,无论用户的实际布局如何,Unity 都会使用通用的 ANSI/ISO“QWERTY”布局来表示键的物理位置。这意味着,如果指定“Q”键,那么它将始终是第一行字母键上最左边的字母,即使用户的键盘在该位置具有不同的字母。

请注意,不应读取游戏内文本输入的键输入,因为此设置不允许用户输入非拉丁字符。请改为使用 Input.compositionString

虚拟轴

默认情况下,创建的每个项目都创建了若干输入轴。通过这些轴可以立即在项目中使用键盘、鼠标和游戏杆输入。

要查看有关这些轴的更多信息,请打开 Input Manager 窗口,然后单击任何轴名称旁边的箭头以展开其属性。

每个输入轴具有以下属性:

属性 功能
Name 轴的名称。使用此名称可以通过脚本来访问轴。
Descriptive Name, Descriptive Negative Name 这些值已弃用,不会产生作用。以前在启动时会在 Rebind Controls 屏幕上为用户显示这些值,但该屏幕也已弃用。
Negative Button, Positive Button 用于分别沿负向和正向推动轴的控件。这些控件可以是键盘上的键,也可以是游戏杆或鼠标上的按钮。
Alt Negative Button, Alt Positive Button 用于分别沿负向和正向推动轴的备用控件。
Gravity 不存在输入时,轴下降到中性点的速度(以单位/秒表示)。
Dead 在应用程序对移动操作进行记录之前,用户需要移动模拟摇杆的距离。在运行时,所有模拟设备在该范围内的输入将被视为 null。
Sensitivity 轴向目标值移动的速度(以单位/秒表示)。仅用于数字设备。
Snap 如果启用此属性,按下对应于反方向的按钮时,轴值将重置为零。
Type 这是控制此轴的输入类型。从以下值中进行选择:

- Key 或 Mouse button
- Mouse Movement
- Joystick Axis
Axis 这是用于控制此轴的连接设备的轴。
JoyNum 这是控制此轴的连接游戏杆。可以选择特定游戏杆,或查询所有游戏杆的输入。

轴值可能为:

  • 对于游戏杆和键盘输入,其为 –1 到 1 之间的值。这些轴的中性位置为 0。某些类型的控件(例如键盘上的按钮)对输入强度不敏感,因此它们不能产生 –1、0 或 1 以外的值。
  • 对于鼠标输入,鼠标增量(鼠标在最后一帧中移动的程度)。用户快速移动鼠标时,鼠标输入轴的这些值可能大于 1 或小于 –1。

添加、删除和复制虚拟轴

要添加虚拟轴,请增加 Size 字段中的数值。这样就会在列表底部创建一个新轴。新轴将复制列表中前一个轴的属性。

要删除虚拟轴,可执行以下操作之一:

  • 减小大小 (Size) 字段中的数值。这样将删除列表中的最后一个轴。
  • 右键单击任何轴,然后选择删除数组元素 (Delete Array Element)
    注意:无法撤消此操作。

要复制虚拟轴,请右键单击该轴并选择复制数组元素 (Duplicate Array Element)

将虚拟轴映射到控件

要将键或按钮映射到轴,请在 Input Manager 中的 Positive ButtonNegative Button 属性中输入其名称。

键名称遵循以下命名约定:

键系列 命名约定
字母键 abc 以此类推
数字键 123 以此类推
箭头键 updownleftright
小键盘按键 [1][2][3][+][equals]
修饰键 right shiftleft shiftright ctrlleft ctrlright altleft altright cmdleft cmd
特殊键 backspacetabreturnescapespacedeleteenterinserthomeendpage uppage down
功能键 f1f2f3 以此类推

鼠标按钮命名为 mouse 0, mouse 1, mouse 2, 以此类推。

游戏杆按钮遵循以下命名约定:

按钮源 命名约定
任何游戏杆上的一个特定按钮 joystick button 0joystick button 1joystick button 2 以此类推
一个特定游戏杆上的一个特定按钮 joystick 1 button 0joystick 1 button 1joystick 2 button 0 以此类推

此外,还可以使用 Input.GetKey 和上文指定的命名约定来查询特定键或按钮的输入。例如:

Input.GetKey("a");

访问键的另一种方法是使用 KeyCode 枚举。

在脚本中使用虚拟轴

要通过脚本访问虚拟轴,可以使用轴名称。

例如,要查询水平轴的当前值并将其存储在变量中,可以使用 Input.GetAxis,如下所示:

float horizontalInput = Input.GetAxis ("Horizontal"); 

对于描述事件而非移动操作的轴(例如,游戏中武器开火),请改用 Input.GetButtonDown

如果两个或多个轴同名,查询将返回具有最大绝对值的轴。这样就可以将多个输入设备分配给一个轴名称。

例如,可以创建两个名为 Horizontal 的轴,并将一个轴分配给键盘输入,将另一个轴分配给游戏杆输入。如果用户正在使用游戏杆,则输入来自游戏杆,键盘输入为 null。否则,输入来自键盘,游戏杆输入为 null。因此,可以编写一个脚本来涵盖多个控制器的输入。

示例

可以使用 HorizontalVertical 轴的输入以及 transform.Translate 方法来移动 XZ 空间中的游戏对象(前移、后移、左移或右移)。在附加到待移动游戏对象的脚本上,将以下代码添加到脚本的 update() 方法中:

float moveSpeed = 10;
//Define the speed at which the object moves.

float horizontalInput = Input.GetAxis("Horizontal");
//Get the value of the Horizontal input axis.

float verticalInput = Input.GetAxis("Vertical");
//Get the value of the Vertical input axis.

transform.Translate(new Vector3(horizontalInput, verticalInput, 0) * moveSpeed * Time.deltaTime);
//Move the object to XYZ coordinates defined as horizontalInput, 0, and verticalInput respectively.

Time.deltaTime 表示自上一帧以来经过的时间。将 moveSpeed 变量乘以 Time.deltaTime 可确保游戏对象在每一帧匀速移动。

InputManager

旧版输入
移动设备输入