[InputSystem官方手册完读]1.InputSystem的安装和快速使用

开这个教程的目的在于,在开发用新输入系统时,查了查网上没有太系统的讲解,并且相比视频,我个人更喜欢文字类的教程记录,这样效率比较高。InputSystem实际上有多种适用于不同场景的使用方式,而一些方式使用不当就容易出现BUG(比如一次按键触发两次),并且在未来有可能会将InputSystem基础上做一下封装进框架便于使用,所幸直接啃官方文档写个文字总结。本文字教程依据链接InputSystem1.5.0,最新版本为1.6,差别不大。

学习完本教程,你能够Get到:

  • 掌握InputSystem的四种工作流。
  • 相当于完整的读了一遍官方英文手册。
  • 掌握InputSystem的使用方式。
  • 精准定制自己想要的输入。

需要说明的是,本教程不仅是使用手册的汉化,我将以更加有逻辑的,易懂的文字对手册中的各部分进行分析讲解,并结合官方案例给予简单明了的使用用例。

InputSystem的安装

InputSystem需要Unity2019.4以上版本和.Net4,低版本不支持。安装在PackageManager搜索安装即可。

alt

在ProjectSetting中启用InputSystem,默认项目使用旧版InputManager,也可以勾选Both同时启用用于测试。

alt

InputSystem的快速使用

直接从当前设备获取输入

和InputManager类似,InputSystem也支持从当前硬件设备直接获取输入。

        //按下S InputSystem
        Keyboard keyboard = Keyboard.current;
        if(keyboard.sKey.wasPressedThisFrame)
        {
            Debug.Log("按下S");
        }

        //按下S InputManager
        if (Input.GetKeyDown(KeyCode.S))
        {
            Debug.Log("按下S");
        }

通过InputAction间接获取输入

尽管传统通过设备直接获取输入的方式简单明了,但在支持多类型设备/修改输入逻辑时,维护起来十分麻烦。为了将硬件输入和输入对应的动作响应进行解耦,InputSystem将动作响应借助事件与实际的硬件输入分开,并由InputActions可视化配置输入和动作响应的映射关系,这样在脚本中无需关注硬件设备类型。

添加PlayerInput组件

alt

为监听输入响应的对象添加PlayerInput组件(PlayerInput对应一个玩家,PlayerInputManager用于获取多个玩家输入)。

创建InputActions

alt

PlayerInput通过与InputAction关联配置响应事件,CreateAction会自动创建默认的Input Action Maps, Input Actions, and Input Bindings。InputAction对应一项具体的输入动作(比如鼠标移动、人物前进后退,单个按键按下),InputBindings则用于配置输入动作与设备的哪些按键绑定,并可以进行功能的细分,详细会在后续章节讲述。

alt

在PlayerInput中配置动作响应

到目前为止已经完成了硬件输入->动作的绑定,还需要将这个动作对应脚本中的方法进行绑定。

alt

alt

使用UnityEvent这种最简单的方式,可以自由指定响应方法,该方法需要为public公开方法,如果想调用动作的相关信息,比如是否按下,坐标值,可以通过InputAction.CallbackContext获取。

    public void hello(InputAction.CallbackContext context)
    {

    }

至此,完整的逻辑已经打通,从硬件输入->动作,动作->实际的响应方法逻辑。可以看出,动作即InputAction充当着中介,将硬件设备与响应方法进行了解耦。

alt

全部评论

相关推荐

02-12 20:22
重庆大学 Java
字节暑期刚入职四天,因为是年前,所以很多正职都放假走了,也就没有给我分配mt,然后有一个老哥在我来的时候给我发了一个landing手册,然后还有关于部门业务的白皮书,还有一些业务代码。然后本人是java面的,进来第一次接触go语言 前面几天熟悉了一下go的语法和go的框架,可以读但是还不太会写,然后业务白皮书也看的很头疼,包括landing手册里要了解的很多东西说实话我看文档真的快看死了,一个嵌套一个,问题是我还完全不知道咋用这个我了解的东西,还有就是那个项目代码,那个老哥喊我去写写单测,熟悉一下go的语法,但也进行的很困难(这是我第一段实习,之前都是springboot那一套,真不太熟悉这个)想问问大家的建议,就是我从现在开始到在开年回来之前应该做些什么,我目前就一个想法 就是复现一个landing手册上的go框架小项目 就是相当于帮自己锻炼锻炼怎么写go 或者各位大佬有没有更好的锻炼go语法的建议还有就是大家都在说vibe coding,那我应该怎么锻炼自己使用ai的能力,感觉我除了给一些需求然后它给我生成代码,好像就没别的用法了,那些什么工作流、拆解、skill啥的都不知道从哪一个地方开始,包括我现在正在实习,不知道精力该怎么分配,去网上想找找关于agent开发的一些学习流程,说实话,众说纷纭,有的是从python开始打基础然后系统学那些rag prompt langchain mcp等等,有的是说直接找一个github上的ai项目然后反复问ai,我确实有点迷茫,恳求各位大佬能留下你们宝贵的建议,我一定认真反复深刻学习有一说一 我觉得字节饭挺好吃的!
双非后端失败第N人:1. go语言我建议你让ai带着你先把基本语法速通了,然后再去用go重新刷你以前刷过的leetcode,这样熟悉起来很快 2. 直接看你们组go项目,里面用***比较复杂,然后把每一个语法现象都喂给ai,一点点看
字节跳动公司福利 1371人发布
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务