| 重要:输入管理器是传统功能,不建议用于新项目。对于新项目,您应该使用 输入系统包。 |
输入管理器窗口允许您为项目定义输入轴及其关联的操作。要访问它,从 Unity 的主菜单中,转到编辑 > 项目设置,然后从右侧的导航中选择输入管理器。
输入管理器使用以下类型的控件
物理键选项允许您将键代码映射到物理键盘布局,而不是映射到不同地区的用户之间可能不同的语言特定布局。
例如,在某些键盘上,第一行字母为“QWERTY”,而在其他键盘上则为“AZERTY”。这意味着如果您将特定控件脚本设置为使用众所周知的“WASD”键进行移动,它们在 AZERTY 布局键盘上将不会处于正确的物理排列(如箭头键排列)。
启用物理键后,Unity 会使用通用的 ANSI/ISO“Qwerty”布局来表示键的物理位置,而与用户的实际布局无关。这意味着如果您指定“Q”键,它始终是第一行字母键的最左侧字母,即使用户的键盘在该位置有不同的字母。
注意,您不应该读取游戏内文本输入的键输入,因为这将不允许用户输入非拉丁字符。相反,请使用 Input.compositionString。
您创建的每个项目默认都会创建一些输入轴。这些轴使您能够在项目中立即使用键盘、鼠标和操纵杆输入。
要了解有关这些轴的更多信息,请打开输入管理器窗口,然后单击任何轴名称旁边的箭头以展开其属性。
每个输入轴都有以下属性
| 属性 | 功能 |
|---|---|
| 名称 | 轴名称。您可以使用它从脚本访问轴。 |
| 描述性名称、描述性负名称 | 这些值已弃用且不起作用。以前,它们会显示在启动时重新绑定控件屏幕上以供用户查看,但该屏幕也已弃用。 |
| 负按钮、正按钮 | 分别将轴推向负方向和正方向的控件。这些可以是键盘上的键,也可以是操纵杆或鼠标上的按钮。 |
| 备用负按钮、备用正按钮 | 分别将轴推向负方向和正方向的备用控件。 |
| 重力 | 当没有输入时,轴每秒下降到中性的速度。 |
| 死区 | 用户需要移动模拟摇杆多远,才能让应用程序注册移动。在运行时,来自所有模拟设备的输入,如果落在该范围内,将被视为空。 |
| 灵敏度 | 轴每秒向目标值移动的速度。这仅适用于数字设备。 |
| 捕捉 | 如果启用,则当按下对应于相反方向的按钮时,轴值将重置为零。 |
| 类型 | 控制轴的输入类型。从以下值中选择 - 键或鼠标按钮 - 鼠标移动 - 操纵杆轴 |
| 轴 | 控制此轴的连接设备的轴。 |
| 操纵杆编号 | 控制此轴的连接操纵杆。您可以选择一个特定的操纵杆,也可以查询所有操纵杆的输入。 |
轴值可以是
要添加虚拟轴,请增加大小字段中的数字。这将在列表底部创建一个新的轴。新轴会复制列表中先前轴的属性。
要删除虚拟轴,您可以
要复制虚拟轴,请右键单击它,然后选择复制数组元素。
要将键或按钮映射到轴,请在输入管理器中的正按钮或负按钮属性中输入其名称。
键名称遵循以下命名约定
| 键族 | 命名约定 |
|---|---|
| 字母键 |
a、b、c… |
| 数字键 |
1、2、3… |
| 箭头键 |
up、down、left、right |
| 数字键盘键 |
[1]、[2]、[3]、[+]、[equals]… |
| 修饰键 |
right shift、left shift、right ctrl、left ctrl、right alt、left alt、right cmd、left cmd |
| 特殊键 |
backspace、tab、return、escape、space、delete、enter、insert、home、end、page up、page down |
| 功能键 |
f1、f2、f3… |
鼠标按钮分别命名为mouse 0、mouse 1、mouse 2等。
操纵杆按钮遵循以下命名约定
| 按钮来源 | 命名约定 |
|---|---|
| 任何操纵杆上的特定按钮 |
joystick button 0、joystick button 1、joystick button 2… |
| 特定操纵杆上的特定按钮 |
joystick 1 button 0、joystick 1 button 1、joystick 2 button 0… |
您还可以使用 Input.GetKey 和上面指定的命名约定来查询特定键或按钮的输入。例如
Input.GetKey("a");
另一种访问键的方法是使用 KeyCode 枚举。
要从脚本访问虚拟轴,您可以使用轴名称。
例如,要查询 Horizontal 轴的当前值并将其存储在变量中,您可以使用 Input.GetAxis,如下所示
float horizontalInput = Input.GetAxis ("Horizontal");
对于描述事件而不是移动的轴(例如,在游戏中发射武器),请改用 Input.GetButtonDown。
如果两个或多个轴具有相同的名称,则查询将返回具有最大绝对值的轴。这使得可以将多个输入设备分配给一个轴名称。
例如,您可以创建两个名为 Horizontal 的轴,并将一个分配给键盘输入,另一个分配给操纵杆输入。如果用户使用操纵杆,则输入来自操纵杆,键盘输入为空。否则,输入来自键盘,操纵杆输入为空。这使您能够编写一个涵盖来自多个控制器的输入的单个脚本。
示例
您可以使用来自Horizontal 和Vertical 轴的输入以及 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 每帧以恒定速度移动。
输入管理器