Unity XR Interaction Toolkit-交互(五)
Interactable
可交互物体
Interactable Events:可以设置发生交互时的事件。
XR Simple Interactable
简单的可交互物体,挂载该组件的碰撞体对象具有悬停交互、点击交互等简单交互功能
XR Grab Interactable
可抓取物体,挂载该组件的碰撞体对象除了简单的交互功能外还可以被交互者抓起。
XR Base Interactor
基础交互者,一般挂载在手柄上可以和可交互物体产生交互。
Interaction Layer Mask:能发生交互的遮罩层。
Audio Events:可以设置发生交互时对应的音效。
Interactable Events:可以设置发生交互时的事件。
XR Ray Interactor
射线交互者,继承于XRBaseInteractor
通过射线与环境发生交互,当射线穿过某可交互物体那么就有发生交互的可能。如射线抓取、射线点击、射线悬停等交互。
这里需要特别说明 XR Ray Interactor是可以用来抓取物体的,当射线悬停在可交互物体上时按住抓取键可以抓起可交互物体
Force Grab:如果Force Grab为True时,即可交互物体会从碰撞点处抓到手上。反之可交互物体固定跟随射线末端(碰撞点)。
XR Direct Interactor
触摸交互者,用于直接与正在触摸的可交互物体进行交互。该组件依赖一个触发器,需要在手柄下添加一个Collider 组件,并将Trigger属性设置为True。仅当触发器与可交互物体发生交集时,有发生交互的可能。该组件可用于 实现真实的手抓取功能。
XRSocketInteractor-套接字交互器
这个脚本名歧义非常大,乍看是不是都以为是联网相关的功能,其实在这里Socket实际跟网络Socket无关,这里的Socket指的是一个配对器(插座),通常可以用它来实现钥匙插入锁开门、插头插入插座等一系列配对操作。
还需要特别注意的是它与其他交互器都不同,不要被它的命名所迷惑。它并不与手柄控制器关联(不用来控制手柄控制器,而是挂载在某个触发器物体,如插座、锁等区域),通过该脚本所属物体其下的触发器来监听是否有配对物体。
Show Interactable: HoverHover交互时的材质与Scale变化。
- Hover Mesh Material - 当可交互物体进入配对器(套接字交互器)区域中时,在AttachTransform处生成一个该材质的网格(跟可交互物体的网格一样)。
- Can't Hover Mesh Material - 当可交互物体进入配对器(套接字交互器)区域中时,如果当前已经有另一个可交互物体与配对器(套接字交互器)配对了,那么就在AttachTransform处生成一个该材质的网格(跟可交互物体的网格一样)表示当前可交互物体不可发生配对。
- HoverScale:在AttackTransform处生成一个多大比例的物体(1为与可交互物体比例一致 1:1)
RecycleDelayTime:在Hover退出后 多久之后才会再次配对成功。
扩展交互
交互器扩展
可交互组件扩展
可交互物体选择模式
我们可以通过设置selectMode来为我们的扩展的可交互组件设置是否被控制器多选或单选。
示例代码:
using UnityEngine.XR.Interaction.Toolkit;
[CanSelectMultiple(false)]
public class ExampleInteractable : XRBaseInteractable
{
}
如上代码所示,在我们自定义扩展的ExampleInteractable组件上指定了[CanSelectMultiple(false)]
特性来设置选择模式。
在项目中笔者使用的XRToolkit1.0.0工具包,该版本的工具包中并没有此特性,见文章XR 交互工具包|XR 交互工具包|1.0.0-前.8 (unity3d.com)。而笔者上面写下了该特性说明,是不是就显得很滑稽了,确实是的。我觉得我自己需要认真反思写文章的目的,真的不能为写而写。在之后一段时间里需要调和研与写的各自价值与比重。
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/unity/unity_technologyshare/703/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!