如何在新的Unity Input系统1.0.0

时间:2020-09-05 06:05:23

标签: c# unity3d input user-input

我正在尝试学习新的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运动的,我已经弄清楚了它是如何工作的(二维向量)。但是,我不确定这种情况是否需要多个键才能实现多种功能。

1 个答案:

答案 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会帮助您。