欢迎光临散文网 会员登陆 & 注册

Unity新输入方案InputSystem介绍-序

2019-06-25 00:56 作者:YouSing  | 我要投稿

写在前面

    其实个人想写介绍InputSystem的文章已经很久,一直找不到好的切入点。首先一点,我觉得介绍类的文章,不会照翻英文文档。目前InputSystem在Github更新频率已经和ScriptableRenderPipeline有得一拼了,官方已经连文档都来不及更了。反正到了正式版发布,Unity中国也会出大量的翻译文档和教程,到时候入门也不会太迟。我知道B站文章不能复制链接,但还是先留下Github地址:

https://github.com/Unity-Technologies/InputSystem

计划以及大纲

    包括本篇,大概会出3~4篇,外加一个外传性质的文章:

  • :吐槽一下UnityEngine.Input这个小老弟;

  • InputSystem的设备管理:先不着急动手,了解新输入系统的设备管理;

  • InputSystem的事件系统:本系列的压轴,会介绍新的输入工作流,即InputAction;

  • 第三方设备接入InputSystem*:(可选),这个是专门写给第三方硬件小厂,不用太多Unity知识,把设备SDK接入Unity的InputSystem。但是可能需求量不大,而且手头边没有合适的设备,有可能会弃掉。

  • 外传-怎么省事地开发多平台VR:之前有个网友问过我,多个VR平台移植问题,我索性写一个文章介绍;

怎么回事儿,UnityEngine.Input

    Input作为Unity初学者早期接触的API,和有些开发平台的输入事件回调不一样,是采用主动查询的调用方式,比如Input.GetXXXX(),Input.GetXXXXDown(),Input.GetXXXXUp()。除了可以直接代码访问键盘,鼠标,触屏以及各种传感器的输入信息外,还提供InputManager自定义摇杆和按键。设置好InputManager后,你就可以用对应的String参数去访问Input.GetAxis()和Input.GetButtonXX()等函数。

看似人畜无害的InputManager

    但是,只要开发Unity久了,你会发现各种各样的问题。由于InputManager的设置对于编程而言,简直就是黑盒子的存在。少写或错写一个字母,或者导入新插件,却忘了导入输入设置,导致Input报错也是家常便饭。另外,批量编辑也不方便,除非你和我一样是敢文本编辑InputManager.asset的猛男。老实说对手柄设备挺不友好,怎么能知道手柄按键对于哪个Axis,有时候换了另外一个手柄,甚至Axis排序也变了。而且你在移动平台使用了虚拟摇杆和虚拟按键,Input就开始摸鱼了。

    这些鸡毛蒜皮倒是可以靠插件解决,还能忍受。但是VR来了,输入设备一下子炸了。各个厂家都推出了自己设备的Unity SDK,而且各个SDK代码风格迥异。只是熟悉SDK的使用方式还好,但是一旦要移植到其他平台,那基本就是推翻重新再来。光是一个访问扳机的输入值,就有可能有四种以上的写法。

    经过几次洗礼,目前大厂的VR SDK其实不多了,Oculus系、SteamVR系、GoogleVR系(好像快要凉凉了,但是我很喜欢谷歌的代码)、PSVR系(没条件碰到)等等。毕竟厂家还是花了大价钱做了底层整合,Input小老弟两只眼睛炯炯有神,于是交出了这份答卷:

这个完全没有解决问题啊

    虽然之后在Packages有提供工具包,去帮你把这些设置添加到InputManager,但是由于不友好而且模糊不清的使用方式,大部分人会用乖乖用回厂家SDK,自己或者第三方封装这些SDK,比较有名的整合方案,如VRTK。Unity不仅多了XR这个命名空间,还多了TrackedPoseDriver,还是扶不起Input,任开发者和各种SDK打架。怎么回事儿,小老弟?

Unity做了哪些尝试

    在Unity 5新推出的StandardAssets,其中有一个CrossPlatformInput包,负责封装了PC和移动端的输入,貌似给了Input一些喘息机会。但StandardAssets更像给人做快速开发,不一会儿CrossPlatformInput也淡出视线。

    不光是开发者,Unity老早了解Input局限性,不管是好用到炸的官方Package,还是那些一个比一个优秀的官方范例工程,都是不断地对Input封装一层。但事情总要解决,2016年,Unity在论坛公布一个新输入的原型,也就是后来的InputSystem。

https://blogs.unity3d.com/2016/04/12/developing-the-new-input-system-together-with-you/

    你可能会觉得只要靠第三方插件,就能解决这些问题。但是,除了输入SDK外,各种优秀插件的输入方案不一定相同。让开发者重复做输入兼容这件事,已经背离引擎的设计初衷。这些事情本来也必须是官方才能解决的,让我们看看摸鱼的Input还能活多久。

那么,InputSystem能用了吗?

    答案是尝鲜可以,做项目慎用。官方目前还在爆肝修各种BUG,有可能一个小版本,API都会有大改动。比如我有个一次更新后,以前配置好的输入资源就GG失效了。甚至有一次通宵查Bug,发现是文档太久没更新,写错了。

瞧,官方多勤奋啊

    总之,Unity的Preview功能,不是让你当小白鼠,一直摸不到头脑。而是预先了解新功能,然后一点一点修正开发的思维方式。等到正式版发布后,才能快速上手。想当年我只能在概念上吹吹ECS,最近预览Tiny后,发现已经和一般Unity编程差不多。这些文章写完后,可能就会闭关玩Tiny了。



Unity新输入方案InputSystem介绍-序的评论 (共 条)

分享到微博请遵守国家法律