重要:输入管理器是传统功能,不建议用于新项目。对于新项目,您应该使用 输入系统包。 |
输入管理器窗口允许您为项目定义输入轴及其关联的操作。要访问它,从 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 每帧以恒定速度移动。
输入管理器