版本:Unity 6 (6000.0)
语言:英语
传统输入
移动设备输入

输入管理器

重要输入管理器是传统功能,不建议用于新项目。对于新项目,您应该使用 输入系统包

输入管理器窗口允许您为项目定义输入轴及其关联的操作。要访问它,从 Unity 的主菜单中,转到编辑 > 项目设置,然后从右侧的导航中选择输入管理器

输入管理器使用以下类型的控件

  • 指的是物理键盘上的任何键,例如 W、Shift 或空格键。
  • 按钮指的是物理控制器(例如游戏手柄)上的任何按钮,例如遥控器上的 X 按钮。
  • 虚拟轴(复数:)映射到一个控件,例如按钮或键。当用户激活控件时,轴会接收一个介于 [–1..1] 范围内的值。您可以在您的 脚本一段代码,允许您创建自己的组件,触发游戏事件,随时间修改组件属性并以您喜欢的任何方式响应用户输入。 更多信息
    参见 术语表
    中使用此值。

物理键

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

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

启用物理键后,Unity 会使用通用的 ANSI/ISO“Qwerty”布局来表示键的物理位置,而与用户的实际布局无关。这意味着如果您指定“Q”键,它始终是第一行字母键的最左侧字母,即使用户的键盘在该位置有不同的字母。

注意,您不应该读取游戏内文本输入的键输入,因为这将不允许用户输入非拉丁字符。相反,请使用 Input.compositionString

虚拟轴

您创建的每个项目默认都会创建一些输入轴。这些轴使您能够在项目中立即使用键盘、鼠标和操纵杆输入。

要了解有关这些轴的更多信息,请打开输入管理器窗口,然后单击任何轴名称旁边的箭头以展开其属性。

每个输入轴都有以下属性

属性 功能
名称 轴名称。您可以使用它从脚本访问轴。
描述性名称、描述性负名称 这些值已弃用且不起作用。以前,它们会显示在启动时重新绑定控件屏幕上以供用户查看,但该屏幕也已弃用。
负按钮、正按钮 分别将轴推向负方向和正方向的控件。这些可以是键盘上的键,也可以是操纵杆或鼠标上的按钮。
备用负按钮、备用正按钮 分别将轴推向负方向和正方向的备用控件。
重力 当没有输入时,轴每秒下降到中性的速度。
死区 用户需要移动模拟摇杆多远,才能让应用程序注册移动。在运行时,来自所有模拟设备的输入,如果落在该范围内,将被视为空。
灵敏度 轴每秒向目标值移动的速度。这仅适用于数字设备。
捕捉 如果启用,则当按下对应于相反方向的按钮时,轴值将重置为零。
类型 控制轴的输入类型。从以下值中选择

- 键或鼠标按钮
- 鼠标移动
- 操纵杆轴
控制此轴的连接设备的轴。
操纵杆编号 控制此轴的连接操纵杆。您可以选择一个特定的操纵杆,也可以查询所有操纵杆的输入。

轴值可以是

  • 对于操纵杆和键盘输入,介于 –1 和 1 之间。这些轴的中性位置为 0。某些类型的控件,例如键盘上的按钮,对输入强度不敏感,因此它们只能生成 –1、0 或 1 以外的值。
  • 对于鼠标输入,鼠标增量(鼠标在上一个帧中移动了多少)。当用户快速移动鼠标时,鼠标输入轴的值可能大于 1 或小于 –1。

添加、删除和复制虚拟轴

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

要删除虚拟轴,您可以

  • 减少大小字段中的数字。这会删除列表中的最后一个轴。
  • 右键单击任何轴,然后选择删除数组元素
    注意:您无法撤消此操作。

要复制虚拟轴,请右键单击它,然后选择复制数组元素

将虚拟轴映射到控件

要将键或按钮映射到轴,请在输入管理器中的正按钮负按钮属性中输入其名称。

键名称遵循以下命名约定

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

鼠标按钮分别命名为mouse 0mouse 1mouse 2等。

操纵杆按钮遵循以下命名约定

按钮来源 命名约定
任何操纵杆上的特定按钮 joystick button 0joystick button 1joystick button 2
特定操纵杆上的特定按钮 joystick 1 button 0joystick 1 button 1joystick 2 button 0

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

Input.GetKey("a");

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

在脚本中使用虚拟轴

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

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

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

对于描述事件而不是移动的轴(例如,在游戏中发射武器),请改用 Input.GetButtonDown

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

例如,您可以创建两个名为 Horizontal 的轴,并将一个分配给键盘输入,另一个分配给操纵杆输入。如果用户使用操纵杆,则输入来自操纵杆,键盘输入为空。否则,输入来自键盘,操纵杆输入为空。这使您能够编写一个涵盖来自多个控制器的输入的单个脚本。

示例

您可以使用来自HorizontalVertical 轴的输入以及 transform.Translate 方法在 XZ 空间(向前、向后、向左或向右)移动 GameObjectUnity 场景中的基本对象,可以代表角色、道具、场景、摄像机、航点等等。GameObject 的功能由附加到它的组件定义。 更多信息
参见 术语表
。将以下代码添加到您要移动的 GameObject 附加的脚本的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可确保 GameObject 每帧以恒定速度移动。

输入管理器

传统输入
移动设备输入