目录
按下 GetButton 按键执行流程(自己推理),有错请指正,谢谢!
public static bool GetKey (string name);
public static bool GetKey (KeyCode key);
public static bool GetButton (string buttonName);
public static float GetAxis (string axisName);
InputMagager
解释:在Input Manager中你可以自定义输入轴及其相关的操作,什么意思呢,简单的来说就是你可以自己定义操作按键,实现游戏对象的跑跳。
Input Manager支持下列的控件(操作形式)
- 键指物理键盘上的任何键,例如 W、Shift 键或空格键。
- 按钮指物理控制器(例如游戏手柄)上的任何按钮,例如 Xbox One 控制器上的 X 按钮
- 虚拟轴被映射到控件(例如按钮或键)。用户激活控件后,该轴会收到 [–1..1] 范围中的某个值。您可以将该值用于您的脚本
添加、删除和复制虚拟轴
要添加虚拟轴,请增加 Size 字段中的数值。这样就会在列表底部创建一个新轴。新轴将复制列表中前一个轴的属性。
要删除虚拟轴,可执行以下操作之一:
- 减小 Size 字段中的数值。这样将删除列表中的最后一个轴。
- 右键单击任何轴,然后选择 Delete Array Element。
注意:无法撤消此操作。
要复制虚拟轴,请右键单击该轴并选择 Duplicate Array Element。
InputManager面板参数解释
参数解释:
- Name:轴名,该String将可作为 Input.GetAxis() Input.GetButton() 的传入参数。轴名可以自定义,跟脚本对上即可。
- Descriptive Name, Descriptive Negative Name: 弃用
- Negative Button, Positive Button:用于分别沿负向和正向推动轴的控件。这些控件可以是键盘上的键,也可以是游戏杆或鼠标上的按钮。一般配合 Input.GetAxis() 方法使用,参数值由unity定义,可填入的值,参考手册Unity - Manual: Input Manager,或者搜索InputManager.
- Alt Negative Button,Alt Positive Button: 备用按键,按钮。
- Gravity: 用于Input.GetAxis()方法归0的变化过程,参数设置越大,GetAxis 函数归0越快
- Dead: 用于轴(游戏手柄的摇杆或扳机等),不希望感受到手柄轻微摇晃的影响,设置这个值为忽略手柄摇晃的范围。
- Sensitivity:用于Input.GetAxis()方法增减值的变化过程,参数设置越大,GetAxis 函数去到1或 -1越快
- Snap:同时按下正负按钮时值归0
- type: 用于轴(游戏手柄的摇杆或扳机等),还没用过
- Axis: 鼠标移动的轴。还没用过
- JoyNum: 用于轴(游戏手柄的摇杆或扳机等),还没用过
按下 GetButton 按键执行流程(自己推理),有错请指正,谢谢!
GeyKey()方法
需要讲解两个方法重载,才能理解这个方法!
public static bool GetKey (string name);
解释:在用户按下 name 标识的键时返回 true。
name 参数能填什么? unity 规定了键盘中的每个键都有一个字符串表示,比如 左方向键用 “left” 表示,所以可输入“left” 表示按下左方向键时传递参数给GetKey函数。
字母键 | 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… |
实际运用:
if (Input.GetKey("left"))
{
transform.Translate(movement * Time.deltaTime);
}
注意:GetKey 返回bool ,InputManager中定义了这个键,使用(Input.GetKey("left"),当左方向键被按下,就返回 true
注意:InputManager中的Negative button 和 Positive Button 是双向控制,在GetAixs 方法中才有作用。
public static bool GetKey (KeyCode key);
解释:在用户按下 key KeyCode 枚举参数标识的键时返回 true。
API中查 KeyCode,能查出所有枚举。
实际运用:
void Update()
{
if (Input.GetKey(KeyCode.A))
{
transform.Translate(movement * Time.deltaTime);
}
}
public static bool GetButton (string buttonName);
解释:用于检测 InputManager 定义的轴是否被输入,返回bool
参数说明:
传递一个InputManager 中的 Name 值
实际运用:
void Update()
{
Vector3 movement = new Vector3(0, 1, 0);
if (Input.GetButton("jump"))
{
transform.Translate(movement * Time.deltaTime);
}
}
public static float GetAxis (string axisName);
解释:返回由 axisName 标识的虚拟轴的值。对于键盘和游戏杆输入设备,该值将处于 -1...1 的范围内。
对于游戏杆的水平轴,值为 1 表示游戏杆向右推到底,值为 -1 表示游戏杆向左推到底;值为 0 表示游戏杆处于中性位置。
将轴映射到鼠标,不会在 -1...1 的范围内。此时,该值为当前鼠标增量乘以轴灵敏度。通常,正值表示鼠标向右/向下移动,负值表示鼠标向左/向上移动。
参数说明:
实际应用:
void Update()
{
float speedMovement = Input.GetAxis("Horizontal");
Vector3 movement = new Vector3(speedMovement, 0, 0);
{
transform.Translate(movement * Time.deltaTime);
}
Debug.Log(speedMovement);
}
深入解析:
按下按键时,方法返回值逐渐增加或减少到 1或-1,这个逐渐变化的过程由什么决定?
答:Unity中的输入系统会根据玩家的输入设备和设置的参数(例如Input Manager中的Gravity和Sensitivity)来决定输入值的变化速度和平滑程度。增加的速率受到Input Manager中的Sensitivity(灵敏度)参数的影响。Gravity参数定义了轴值从非零状态过渡到零状态的速度。较大的Gravity值会使值更快地回到零。
Input.GetAxisRaw("Horizontal") 则没有平滑过程,直接返回整数值。