当前位置: 首页 > news >正文

【MR开发】在Pico设备上接入MRTK3(三)——在Unity中运行MRTK示例

在前面的文档中,介绍了如何在Unity工程中配置号MRTK和Pico SDK

  • 【MR开发】在Pico设备上接入MRTK3(一)在Unity中导入MRTK3依赖
  • 【MR开发】在Pico设备上接入MRTK3(二)在Unity中配置Pico SDK

本文将介绍如何运行一个简单的带有MRTK的示例


以下正文


导入MRTK示例

导入目的

这里我们主要是需要MRTK中手部相关预制件和部分UI示例。

快捷导入

导入MRTK示例场景的Unitypackage,下载地址

注意事项

  • 这个package不包含MRTK3的相关依赖,需确保在这之前已成功导入MRTK3。
  • 出现TMP Importer的弹窗,点击Import导入TMP
  • 部分资源有缺失,去掉这些资源。(因为这个暂时用不上)

例如,去掉下图中的MRTK_Logo等对象
在这里插入图片描述

接入Pico的手部模型

打开示例场景

打开Assests/Scenes/SampleScene.unity
在这里插入图片描述

修改手部模型

  1. 修改“MRTK RightHand Controller”组件的Model设置。

修改前:
在这里插入图片描述
修改后:
在这里插入图片描述
2. 同理,修改另外一个手部模型
3. 禁用Pico的默认射线对象
禁用Ray对象

若不禁用,则会出现MRTK的射线与Pico的手部射线对象同时存在的情况

注意
Pico SDK文档中介绍,将手部预制件(如HandLeft)添加到“XR-Rig”->“Camera Offest”的节点下面。而当接入MRTK后,请勿添加。否则场景中会出现多个手部模型。

修改组件

注意:若是采用前文的整合包资源,则无需这个步骤。我已做修改。
下载地址:MRTK3整合包下载链接

修改MRTK的脚本

这里参考了MRTK3在PICO4上的使用小结
这里会用到之前设置的“PICO_INSTALL”,采用条件编译

  1. 修改ArticulatedHandController
    在这里插入图片描述

此脚本挂载于MRTK XR Rig下的MRTK LeftHand Controller和MRTK RightHand Controller物体上。修改其中的UpdateInput方法,添加条件编译指令,示例如下:

        /// <inheritdoc />protected override void UpdateInput(XRControllerState controllerState){//...// Debounce the polyfill pinch action value.bool isPinched = pinchAmount >= (pinchedLastFrame ? 0.9f : 1.0f);#if !PICO_INSTALL// Inject our own polyfilled state into the Select state if no other control is bound.if (!selectAction.action.HasAnyControls() || isTrackingStatePolyfilled){controllerState.selectInteractionState.active = isPinched;controllerState.selectInteractionState.activatedThisFrame = isPinched && !pinchedLastFrame;controllerState.selectInteractionState.deactivatedThisFrame = !isPinched && pinchedLastFrame;}if (!selectActionValue.action.HasAnyControls() || isTrackingStatePolyfilled){controllerState.selectInteractionState.value = pinchAmount;}// Also make sure we update the UI press state.if (!uiPressAction.action.HasAnyControls() || isTrackingStatePolyfilled){controllerState.uiPressInteractionState.active = isPinched;controllerState.uiPressInteractionState.activatedThisFrame = isPinched && !pinchedLastFrame;controllerState.uiPressInteractionState.deactivatedThisFrame = !isPinched && pinchedLastFrame;}if (!uiPressActionValue.action.HasAnyControls() || isTrackingStatePolyfilled){controllerState.uiPressInteractionState.value = pinchAmount;}pinchedLastFrame = isPinched;
#elsecontrollerState.selectInteractionState.active = isPinched;controllerState.selectInteractionState.activatedThisFrame = isPinched && !pinchedLastFrame;controllerState.selectInteractionState.deactivatedThisFrame = !isPinched && pinchedLastFrame;controllerState.selectInteractionState.value = pinchAmount;controllerState.uiPressInteractionState.active = isPinched;controllerState.uiPressInteractionState.activatedThisFrame = isPinched && !pinchedLastFrame;controllerState.uiPressInteractionState.deactivatedThisFrame = !isPinched && pinchedLastFrame;controllerState.uiPressInteractionState.value = pinchAmount;pinchedLastFrame = isPinched;
#endif}// Cast to expose hand state.//...}}

添加PXR组件

添加PXR_Manager,并启用手势追踪
在这里插入图片描述

运行示例场景

运行截图

http://www.lryc.cn/news/464009.html

相关文章:

  • C#中委托的应用与示例
  • 算法: 模拟题目练习
  • 软考中级科目怎么选?软考中级证书有什么用?
  • HTTP 请求的请求体是什么
  • 助力语音技术发展,景联文科技提供语音数据采集服务
  • PyTorch搭建神经网络入门教程
  • 你的电脑能不能安装windows 11,用这个软件检测下就知道了
  • BF 算法
  • SHOW-O——一款结合多模态理解和生成的单一Transformer
  • 缓存框架JetCache源码解析-缓存变更通知机制
  • Android 设置特定Activity内容顶部显示在状态栏底部,也就是状态栏的下层 以及封装一个方法修改状态栏颜色
  • 用自己的数据集复现YOLOv5
  • 如何在博客中插入其他的博客链接(超简单)最新版
  • JS通过递归函数来剔除树结构特定节点
  • javayufa
  • 软考-高级系统分析师知识点-补充篇
  • JavaScript全面指南(四)
  • 2024年诺贝尔物理学奖的创新之举
  • FileLink内外网文件交换——致力企业高效安全文件共享
  • 使用Python在Jupyter Notebook中显示Markdown文本
  • G1 GAN生成MNIST手写数字图像
  • WPFDeveloper正式版发布
  • 实现鼠标经过某个元素时弹出提示框(通常称为“工具提示”或“悬浮提示”)
  • 【GAMES101笔记速查——Lecture 17 Materials and Appearances】
  • 对于从vscode ssh到virtualBox的timeout记录
  • 鸿蒙原生应用扬帆起航
  • 《计算机视觉》—— 表情识别
  • NVIDIA Aerial Omniverse
  • QT程序报错解决方案:Cannot queue arguments of type ‘QTextCharFormat‘ 或 ‘QTextCursor‘
  • MySQL知识点_03