admin管理员组文章数量:1589952
首先配置一个可拾取的物体,右键->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);
}
二、单手拾取
改变交互框架下,物体根据手柄的移动产生逻辑,可以制作拉门,摇杆,按钮等功能
了解XRGrabInteractable的运行机制
打开文件可以看到,一个ProcessInteractable函数
在这里,用swtich分隔开了多个状态,其中当updatePhase值为Dynamic或OnBeforeRender时,会处理物体的位置和角度信息,详细看UpdateTarget函数
在UpdateTarget函数里,通过InvokeGrabTransformersProcess函数获取一个ref的Pose值,然后在下面为Transform赋值,而这个InvokeGrabTransformersProcess函数,则是通过获取挂载物体身上的XRBaseGrabTransformer基类来更改Pose值
所以要写逻辑,只需要写一个Transformer脚本挂在物体身上,基类的Start方法会自动添加到XRGrabInteractable中,注意不要覆盖Start
下面是默认状态下的Transformer,没有挂载Transformer时会自动添加这个
如果要自定义移动方法,可以更改UpdateTarget里的内容
三、双手拾取
在单手拾取的基础上,获取第二只手柄的信息
grabInteractable.interactorsSelecting[1]
用来制作双手放大,双手旋转的功能
本文标签: 物体xRUnityToolkitInteraction
版权声明:本文标题:Unity XR Interaction Toolkit(三)拾取物体 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728075771a1144452.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论