🟥 实现射线抓取功能
- 物体添加 XRGrabInteractable 组件即可。
现在当我们射线指向物体,按下手柄侧键时,会抓取该物体到手柄处。
🟧 实现手柄抓取功能
1️⃣ 物体添加交互组件
首先物体完成组件的添加: XRGrabInteractable 组件
2️⃣ 关闭原先的手部交互物体
原先我们是用的右手射线交互的,是利用了该物体上的 XRRayInteractor组件完成射线抓取。
现在我们关掉这个物体,不再使用射线抓取。
3️⃣ 新建手柄抓取物体
- 在Camera Offset下右键,新建 XR - Direct Interactor(Action-based)
- 这儿我们使用右手抓取。因此再改名为 Right Direct Interactor
- 同样的,默认创建的是左手的Controller。我们将Sample里面的右手Controller拖拽上去。
4️⃣ 让手柄显示出来
我们之前做的都只显示射线,不显示手柄。
那么为了能看到手抓取的效果,我们需要:
- 在 Direct Interactor 下新建一个sphere,来模拟手
- 取消其Collider
- 调整到合适比例
5️⃣ 效果展示
🟨 交互功能的控制
1️⃣ 交互功能的逻辑
我们能看到 LeftHand Controller 物体上的 XRRayInteractor 脚本有 InteractionLayerMask属性。
同样的,有这个属性的还有:
- 直接抓取物体的手柄(Direct Interactor): XRDirectInteractor
- 地面:TeleportationArea
- 可交互物体:XRGrabInteractable
这个层的逻辑是:
手柄设置为某一层,其他与这一层有交集的物体,便可与手柄发生交互。(注意:Everything、Nothing)
那么我们便可以做各种各样的操作了。例如:
- 只有左手传送
- 等待时机才能传送到某地面
- 只能右手抓取
- 等待时机才能抓取某物体
2️⃣ 实现左手负责传送,右手不传送
左手层级设置为Teleport,地面也设置为Teleport。
右手层级取消Teleport即可。
🟩 如何取消射线的显示
以右手为例:
将Alpha值调为0即可。