包含此页的版本:
不含此页的版本:
| 重要提示:输入管理器是旧功能,不建议用于新项目。对于新项目,您应该使用输入系统包。 |
输入管理器(Input Manager) 窗口允许你为项目定义输入轴及其关联作。要访问它,请从 Unity 的主菜单转到 编辑 > 项目设置,然后从右侧导航中选择 输入管理器。
输入管理器使用以下类型的控件:
“物理键”选项允许您将键代码映射到物理键盘布局,而不是映射到不同区域的用户之间可能不同的特定于语言的布局。
例如,在某些键盘上,第一行字母显示为“QWERTY”,而在其他键盘上,第一行字母显示为“AZERTY”。这意味着,如果您编写了特定控件的脚本以使用众所周知的“WASD”键进行移动,则它们在 AZERTY 布局键盘上将不会采用正确的物理排列(如箭头键排列)。
启用物理键后,Unity 使用通用 ANSI/ISO“Qwerty”布局来表示键的物理位置,而不管用户的实际布局如何。这意味着,如果指定“Q”键,它将始终是字母键第一行最左边的字母,即使用户的键盘在该位置有不同的字母。
请注意,您不应读取游戏内文本输入的键输入,因为这将不允许用户输入非拉丁字符。相反,请使用Input.compositionString.
默认情况下,您创建的每个项目都有许多输入轴。这些轴使你能够立即在项目中使用键盘、鼠标和纵杆输入。
要查看有关这些轴的更多信息,请打开 输入管理器(Input Manager) 窗口,然后单击任何轴名称旁边的箭头以展开其属性。
每个输入轴具有以下属性:
| 财产 | 功能 |
|---|---|
| 名字 | 轴名称。您可以使用它从脚本访问轴。 |
| 描述性名称、描述性否定名称 | 这些值已弃用,不起作用。以前,它们在启动时在“重新绑定控件”屏幕上为用户显示,但此屏幕也已弃用。 |
| 负按钮、正按钮 | 分别在负方向和正方向上推动轴的控件。这些可以是键盘上的按键,也可以是纵杆或鼠标上的按钮。 |
| Alt 负值按钮、Alt 正值按钮 | 分别向负方向和正方向推动轴的替代控件。 |
| 重力 | 当不存在输入时,轴向中性方向下降的速度(以单位为单位的每秒)。 |
| 死 | 在应用程序注册移动之前,用户需要移动模拟摇杆多远。在运行时,来自此范围内的所有模拟设备的输入将被视为空。 |
| 敏感性 | 轴向目标值移动的速度(以单位/秒为单位)。这仅适用于数字设备。 |
| 折 | 如果启用,则在按下与相反方向相对应的按钮时,轴值将重置为零。 |
| 类型 | 控制轴的输入类型。从以下值中选择: - 按键或鼠标按钮 - 鼠标移动 -纵杆轴 |
| 轴 | 控制此轴的已连接设备的轴。 |
| 乔伊纳姆 | 控制此轴的连接纵杆。您可以选择特定的纵杆,或查询所有纵杆的输入。 |
轴值可以是:
要添加虚拟轴,请增加“大小”字段中的数字。这会在列表底部创建一个新轴。新轴复制列表中前一个轴的属性。
要删除虚拟轴,您可以:
要复制虚拟轴,请右键单击它并选择 复制阵列元素(Duplicate Array Element)。
若要将键或按钮映射到轴,请在输入管理器的“正按钮”或“负按钮”属性中输入其名称。
键名称遵循以下命名约定:
| 钥匙系列 | 命名约定 |
|---|---|
| 字母键 |
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列举。
要从脚本访问虚拟轴,您可以使用轴名称。
例如,要查询水平轴的当前值并将其存储在变量中,您可以使用Input.GetAxis喜欢这个:
float horizontalInput = Input.GetAxis ("Horizontal");
对于描述事件而不是移动的轴(例如,在游戏中发射武器),请使用Input.GetButtonDown相反。
如果两个或多个轴具有相同的名称,则查询将返回具有最大绝对值的轴。这样就可以将多个输入设备分配给一个轴名称。
例如,可以创建两个名为 Horizontal 的轴,并将一个分配给键盘输入,另一个分配给游戏杆输入。如果用户使用游戏杆,则输入来自游戏杆,键盘输入为 null。否则,输入来自键盘,游戏杆输入为 null。这使你能够编写涵盖来自多个控制器的输入的单个脚本。
例
您可以使用来自水平轴和垂直轴的输入,以及transform.Translate移动游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表在 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确保游戏对象每帧都以恒定的速度移动。
输入管理器