我正在尝试学习新的Unity输入系统。在以前的Unity输入系统中,
if (Input.GetKeyDown("f"))
//do something when key 'f' is pressed
if (Input.GetKeyDown("g"))
//do something when key 'g' is pressed
if (Input.GetKeyDown("h"))
//do something when key 'h' is pressed
if (Input.GetKeyDown("j"))
//do something when key 'j' is pressed
将按f,g,h,j进行任何已定义的动作。
在新的Unity输入系统中,有 InputAction ,我可以定义操作映射,操作和属性。然后,我可以实现以下函数,可以在播放器对象检查器的 PlayerInput 中调用这些函数。
public void OnKey_F(InputAction.CallbackContext context)
{
if (context.started)
Debug.Log("Pressed F");
}
public void OnKey_G(InputAction.CallbackContext context)
{
if (context.started)
Debug.Log("Pressed G");
}
public void OnKey_H(InputAction.CallbackContext context)
{
if (context.started)
Debug.Log("Pressed H");
}
public void OnKey_J(InputAction.CallbackContext context)
{
if (context.started)
Debug.Log("Pressed J");
}
在新的Unity输入系统下,执行上述相同功能的正确方法是吗?我发现的教程主要是关于WASD运动的,我已经弄清楚了它是如何工作的(二维向量)。但是,我不确定这种情况是否需要多个键才能实现多种功能。
答案 0 :(得分:1)
有几种方法可以完成此操作,所以对不起,我仍然不是100%使用此表格,但是我想我会分享简单的实现方法,该实现方法对我来说可以多次按下按键,效果很好完全绕开了大部分检查员的工作。
首先选择玩家输入地图资产,然后确认“生成C#类”按钮已激活并应用。
然后在MonoBehavior脚本中,实例化该类,并添加内联回调函数:
PlayerInputClass Inputs;
void Awake(){
Inputs = new PlayerInputClass();
Inputs.Enable();
// Examples. You can add as many as you want.
// You can put the ContextCallback to use
Inputs.Player.Move.performed += ctx => Movement = ctx.ReadValue<Vector2>();
// You can complete ignore it
Inputs.Player.Roll.performed += ctx => _RollInputFlag = true;
// You can define a function to handle the press
Inputs.Player.OtherAction.performed += FunctionThatRuns();
}
我通常选择翻转标志,以便脚本可以准确决定何时响应并还原标志。
请注意,这里Player
是操作映射名称,其后的名称是实际的操作名称。这也很好,因为Intellisense会帮助您。