Version: 6000.3
语言: 中文
传统输入
移动设备输入

输入管理器

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

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

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

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

物理密钥

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

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

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

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

虚拟轴

默认情况下,您创建的每个项目都有许多输入轴。这些轴使你能够立即在项目中使用键盘、鼠标和纵杆输入。

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

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

财产 功能
名字 轴名称。您可以使用它从脚本访问轴。
描述性名称、描述性否定名称 这些值已弃用,不起作用。以前,它们在启动时在“重新绑定控件”屏幕上为用户显示,但此屏幕也已弃用。
负按钮、正按钮 分别在负方向和正方向上推动轴的控件。这些可以是键盘上的按键,也可以是纵杆或鼠标上的按钮。
Alt 负值按钮、Alt 正值按钮 分别向负方向和正方向推动轴的替代控件。
重力 当不存在输入时,轴向中性方向下降的速度(以单位为单位的每秒)。
在应用程序注册移动之前,用户需要移动模拟摇杆多远。在运行时,来自此范围内的所有模拟设备的输入将被视为空。
敏感性 轴向目标值移动的速度(以单位/秒为单位)。这仅适用于数字设备。
如果启用,则在按下与相反方向相对应的按钮时,轴值将重置为零。
类型 控制轴的输入类型。从以下值中选择:

- 按键或鼠标按钮
- 鼠标移动
-纵杆轴
控制此轴的已连接设备的轴。
乔伊纳姆 控制此轴的连接纵杆。您可以选择特定的纵杆,或查询所有纵杆的输入。

轴值可以是:

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

添加、删除和复制虚拟轴

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

要删除虚拟轴,您可以:

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

要复制虚拟轴,请右键单击它并选择 复制阵列元素(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确保游戏对象每帧都以恒定的速度移动。

输入管理器

传统输入
移动设备输入