Unity XR Interaction Toolkit(三)拾取物体

首先配置一个可拾取的物体,右键->XR->Grab Interactable,就会创建一个0.1尺寸的小立方体

XRGrabInteractable:

Distance Calculation Mode:根据模式选择坐标点,可以选择Transform的坐标或者碰撞器的坐标

Select Mode:抓取方式,分为单手和双手,在变换脚本挂载时,会根据这个脚本激活

Movement Type:

        Velocity Tracking:通过设置刚体力移动,也就是说可以被物体遮挡,也会影响其他物体

        Kinematic:移动刚体,但是是运动学,自身不受碰撞影响,会影响其他物体

        Instantaneous:通过设置transform的坐标移动,不会触发物理机制

Attach Transform:依附点,为空的时候,会以物体中心为坐标。当不为空时,会贴合手柄的坐标和旋转角度

一、XR Interaction Toolkit代码拾取

手动添加到手柄拾取中

首先,我们需要在代码中获取这个被拾取的物体

IXRSelectInteractable(也就是XRGrabInteractable),还需要获取抓着他的交互器

IXRSelectInteractor(可以是DirectInteractor或RayInteractor,详细看上篇)。

IXRSelectInteractable很好获取,那么它的交互器怎么获取呢?

XRGrabInteractable grabObject;

void Handle(){
    IXRSelectInteractable interactable = grabObject as XRGrabInteractable;
    // 抓取的一个交互
    IXRSelectInteractor interactor = interactable.interactorsSelecting[0];
}

手动拾取代码,以下代码添加的抓取,会被真实手柄放开时丢弃。但是不能丢弃对真实手柄抓取的物体(有点鸡肋),如果执行时会有警告Debug。

XRGrabInteractable grabObject;

void Handle(){
    IXRSelectInteractable interactable = grabObject as XRGrabInteractable;
    // 抓取的一个交互
    XRBaseInteractor interactor = (XRBaseInteractor)interactable.interactorsSelecting[0];

    // 抓取
    interactor.StartManualInteraction(interactable);
    // 丢弃
    interactor.EndManualInteraction(interactable);
}

那么如何才能移除手中抓取的物体呢?

XRGrabInteractable grabObject;

void DropGrabObject(){
    XRInteractionManager manager = FindObjectType<XRInteractionManager>();

    IXRSelectInteractable interactable = grabObject as XRGrabInteractable;
    // 抓取的一个交互
    XRBaseInteractor interactor = (XRBaseInteractor)interactable.interactorsSelecting[0];
    
    // 丢弃
    manager.SelectExit(interactor, interactable);
    // 抓取
    manager.SelectEnter(interactor, interactable);
}

二、单手拾取

三、双手拾取

四、自定义方式

猜你喜欢

转载自blog.csdn.net/qq_36608844/article/details/129055015
今日推荐