unity3d 如何在Unity中持续使用InputSystem中的交互?

xvw2m8pv  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(208)

我现在正在创建一个小的2D游戏与触摸输入。我试图创建移动,射击和瞄准控制。我想到使用一个单一的点击移动,瞄准我想按下屏幕并按住,并拍摄一个简单的双击屏幕。不幸的是,当我使用InputSystem模块实现这一点时,动作只运行一次。当我不按下屏幕时,它们不会重置回来。如何重新设置?
没有交互,玩家的移动是好的。但是用户不能区分目标和移动的控制。所以为了让玩家得到这个区别,我尝试使用交互。当我实现这个,方法只工作一次。A photo of my InputSystem without adding the interactions每个函数背后的逻辑是完美的,因为我实现这些函数没有inputsystem模块。

0aydgbwb

0aydgbwb1#

您可以通过Interactions修改器限制/区分具有相同绑定的动作,您可以调整某些内容,如按下一定的持续时间,点击一定的最大按下持续时间等。
参见Interactions,特别是预定义交互

  • 新闻界
  • 保持
  • 水龙头
  • 慢速敲击
  • 多次点击x1c 0d1x

如果您还希望每帧有一些连续事件,则需要使用HOLD交互,然后

  • 聆听操作的performed
  • 立旗
  • 如果设置了标志,则每帧激发事件
  • 听到操作结束
  • 重置标志-〉停止击发事件

根据上图
比如

public class InputHandler : MonoBehaviour
{
    private bool isMoving;

    public event Action whileMoving;

    private void Awake()
    {
        var inputActions = new YourInputActionsClass();

        inputActions.YourActionMap.Move.performed += OnMoveStarted;
        inputActions.YourActionMap.Move.canceled += OnMoveEnded;
    }

    private void OnMoveStarted(InputAction.CallbackContext context)
    {
        isMoving = true;
    }

    private void OnMoveEnded(InputAction.CallbackContext context)
    {
        isMoving = false;
    }
    
    private void Update()
    {
        if(isMoving) whileMoving?.Invoke();
    }
}

然后,您更愿意订阅已处理的whileMoving事件,该事件将在触发Moving动作时的每一帧激发

相关问题