InputSystem学习

InputSystem学习,第1张

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 前言
  • 一、输入系统切换
  • 二、两种使用InputSystem的方法
    • 1.直接引用
    • 2.间接引用
      • (1)通过PlayerInput
      • (2)通过C#
        • Value类
        • Button类
        • PassThrough类
        • 注意
  • 总结


前言

Unity InputSystem学习记录
参考:
转载
官方文档
转载


一、输入系统切换

二、两种使用InputSystem的方法 1.直接引用

不需要InputAction,4类的各种按键均有默认值;
代码如下(示例):

private void Update()
    {

        var gamepad = Gamepad.current;//手柄
        var keyboard = Keyboard.current;//键盘
        var mouse = Mouse.current;//鼠标
        var pointer = Pointer.current;//指针

        if (gamepad != null)
        {
            Debug.Log(gamepad.leftStick.ReadValue());//手柄遥感的偏移
            if (gamepad.bButton.wasPressedThisFrame)
                Debug.Log("按下B键");
        }
        if (keyboard != null)
        {
            //执行顺序 isPressed = false -> 按下:wasPressedThisFrame = true -> 中途:isPressed = true -> 松开:wasReleasedThisFrame = true -> isPressed = false
            if (keyboard.wKey.wasPressedThisFrame)
                Debug.Log("w键按下(一直按住w键的话,也只执行一次)");
            if (keyboard.wKey.wasReleasedThisFrame)
                Debug.Log("w键松开");
            Debug.Log("是否按住w键:" + keyboard.wKey.isPressed);
        }
        if (mouse != null)
        {
            Debug.Log(mouse.scroll.ReadValue());//滚轮的滚动值,向前滚Y的值为正,向后滚为负

            if (mouse.leftButton.wasPressedThisFrame)
                Debug.Log("按鼠标左键");
            if (mouse.rightButton.wasPressedThisFrame)
                Debug.Log("按鼠标右键");
            if (mouse.middleButton.wasPressedThisFrame)
                Debug.Log("按滚轮键");
        }
        if (pointer != null)
        {
                Debug.Log(pointer.delta.ReadValue());//与上一帧的偏移
              Debug.Log(pointer.position.ReadValue());//在空间中的坐标
        }
2.间接引用

创建InputAction, 其中Move,Look是Value(Vector2类型),Jump是Button,Sprint是PassThrough类型;

(1)通过PlayerInput


通过绑定Actions,来获取输入;Behaviors一栏有四种,当为SendMessage/BroadcastMessage时可通过挂在该物体上的脚本的方法回调;

    public void OnMove(InputValue value)//形参可为空
    {
        var v = value.Get<Vector2>()//Todo
    }
       public void OnJump(InputValue value)//Button;形参可为空,按下为ture;松开不会变成false;
    {
        var v = value.isPressed;
        //Todo
    }
    public void OnSprint(InputValue value)//PassThrough;形参可为空,按下为ture;松开会变成false;
	{
		var v = value.isPressed;
		//Todo
	}

当为UnityEvent时,其他基本相同,回调参数改变

    public void OnMove(InputAction.CallbackContext context)
    {
        var value = context.ReadValue<Vector2>();
        //Todo
    } 
(2)通过C#


Apply后,自动生成脚本(生成的文件名和类名可能不一致,如果你改名字的话);通过其他脚本来调用;

     private StarterInput StarterInput;
     private void OnEnable()
    {
        if (StarterInput == null)
        {
            StarterInput = new StarterInput();
            //Todo
        }
        StarterInput.Enable();
    }
    private OnDisable()
	{
    StarterInput.Disable();
	}
Value类

如move;要在Update里读取;

     private void Update()
    {
      var  move = StarterInput.Player.Move.ReadValue<Vector2>();  
    }
Button类

如jump;回调有顺序 started=>performed=>canceled,在按下期间(started,performed)ReadValueAsButton始终为true;松开后(canceled)ReadValueAsButton为false;
如果想达到按下变true然后马上变回false;建议改成isjump=false或者在lateUpdate中设置isJump=false

	public bool isJump;
	 private void OnEnable()
    {
     StarterInput.Player.Jump.started += ctx => {isJump = ctx.ReadValueAsButton();};
     StarterInput.Player.Jump.performed += ctx =>
      {//isJump = ctx.ReadValueAsButton();
      	isJump =false};
     StarterInput.Player.Jump.canceled += ctx => {isJump = ctx.ReadValueAsButton();};
    }
PassThrough类

如Sprint;PassThrough类不响应started ,canceled 回调,只响应performed 回调,

performed回调;按下ReadValueAsButton变true,松开变ReadValueAsButtonfalse

	public bool isSprint;
	 private void OnEnable()
    {
     StarterInput.Player.isSprint.performed += ctx =>{isSprint= ctx.ReadValueAsButton();};    
    }
注意

需要注意的是我们必须手动的设置其Enable和Disable,来启动或关闭InputAction


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/876106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存