Unity XR Interaction Toolkit中Action与Device的差异探究

XR交互工具包的两种交互方式

前情提要:此文章是自己对XR交互的两种方式的理解,很可能有些不太对的地方,同时这里面的内容,也需要对XR交互使用有了较熟练的使用才能看懂

XR Interaction Toolkit实际上提供了基于Action和Device两种交互方式

在这里插入图片描述

Device的交互组件

  • 不需要过多的初始化配置,因为组件默认就指定了一套常规的交互配置,直接导入到场景中就可以使用,很方便,下面XRController截图可以看出
    在这里插入图片描述
  • 用起来简单,但是扩展性和可定制化不高,因为这里的交互已经局限在默认的一些枚举配置中,比如说控制器类型的枚举:XRNode,按键枚举类型:InputHelper.Button,这些配置满足常见的一些XR设备确实够用了,但是假如这是来了个新设备,它是用触摸板交互,你就会发现Device无法获取到它的输入
    在这里插入图片描述
    在这里插入图片描述

Action的交互组件

  • Action组件导入,就多需要些配置,默认没有任何输入行为,当然我们可以导入XR交互包中的示例Action配置
    在这里插入图片描述
    在这里插入图片描述

  • 将示例的Action配置设置到XRController(Action)上
    在这里插入图片描述

  • 我理解的Action交互核心就是将,XR设备的输入特征值定义为一个行为,然后将这个行为指定给交互组件,这样的好处就是当你想替换一个交互按键,你只需要修改对应的Action配置文件,同时Unity给大多数的设备都配置有输入特征值接口,你可以再不同设备中切换他们的输入
    在这里插入图片描述

  • 甚至可以使用XR Simulated Controller实现在PC上对XR设备的模拟调试(虽然PC操作起来还是很繁琐)
    在这里插入图片描述

总结:趋势是Action

  • 从可扩展性上,Device的交互组件会慢慢被淘汰掉
  • 还有一点很重要,OpenXR插件只支持Action交互,而现在趋势是后面有很多XR设备厂商开始支持OpenXR标准
    在这里插入图片描述
  • Unity官方的交互案例也是将Device交互示例场景标注为过时的,这里顺便附上此项目地址:https://github.com/Unity-Technologies/XR-Interaction-Toolkit-Examples
    在这里插入图片描述
  • 所以总结未来趋势是Action,大家赶紧把Action用起来把

Action和Device输入的获取区别

Device的输入

  • 获取比较直接,可以看下XRController类,通过传入按钮类型参数,获取对应的输入值
    在这里插入图片描述

  • 这里会发现,XRController获取的输入值只能是bool和float,要获取输入Vector2需要简单扩展下(可以查看InputDevice源码理解)

        public Vector2 GetAxisVector2()
        {
    
    
            inputDevice.TryGetFeatureValue(new InputFeatureUsage<Vector2>("Primary2DAxis"), out var value);
            return value;
        }

Action的输入

  • 同理,看ActionBaseController类,获取输入值,需要传入InputAction
    在这里插入图片描述
  • 而InputAction参数是什么呢,还记得我们之前添加的Action配置吗,这个属性是InputActionProperty类型,可以很方便获取到InputAction对象
    在这里插入图片描述
    在这里插入图片描述
  • 同样,Controller类型这里缺少Vector2的输入值获取,简单扩展下即可
        public Vector2 GetAxisVector2(InputAction inputAction)
        {
    
    
            if (inputAction.activeControl is Vector2Control)
                return inputAction.ReadValue<Vector2>();
            return Vector2.zero;
        }
  • 可以看出Action对于输入的获取会麻烦些,需要传入一个对应的InputAction对象(Device只需要传入一个InputHelper.Button枚举值即可),所以这里有个优化的地方,可以将开发设备常用的按键InputAction配置出来,然后自己定义一个枚举进行对应,这样咱们也可以通过传入几个枚举值获取到InputAction,从而能获取对应输入值
    常用的按键InputAction配置

猜你喜欢

转载自blog.csdn.net/m0_37965883/article/details/125793051
今日推荐