如何使用Unity ARFoundation和XR Interaction Toolkit对Prefab进行选择、缩放、移动、和旋转操作?

news2024/11/24 8:37:06

本文分享一种很常见的AR体验的实现。这种AR体验即,手机相机检测到指定图片/平面/实物之后,虚拟模型随之出现,并允许用户在屏幕上使用手势(例如双指捏合)对该虚拟模型进行选择、缩放、移动、和旋转操作。

这种体验有很多种实现方法。本文分享基于Unity ARFoundation + XR Interaction Toolkit的实现方法。

在创建好Unity AR项目之后(可参看这篇文章),需要完成下面步骤。

  1. 安装XR Interaction Toolkit
  2. 在AR Session中添加Interaction Manager
  3. 在AR Camera中添加需要的Interactor Component
  4. 在Prefab中添加需要的Interactable Component
  5. 根据需要,将Prefab和某种track manager 连系在一起

接下来,让我们来看具体操作。

第一步:安装XR Interaction Toolkit

请参考官方文档。

第二步:在AR Session中添加Interaction Manager

点击AR Session, 在Inspector中点击Add Component,搜索并添加Interaction Manager。
未添加前
添加完成后如下图所示。
在这里插入图片描述

第三步:在AR Camera中添加需要的Interactor Component

有很多不同Interactor可以选择,详情见官方文档,例如AR Gesture Interactor、XR Direct Interactor、XR Ray Interactor、XR Socket Interactor。

在手机AR体验中,多是使用基于屏幕的交互,例如基于双指捏合进行缩放,而AR Gesture Interactor对这些交互进行了封装,因此我们需要添加AR Gesture Interactor。

添加方式为:点击AR Camera, 在Inspector中点击Add Component,搜索并添加AR Gesture Interactor。

添加完成之后,需要进行一些设置,见下图:
在这里插入图片描述

第四步:在Prefab中添加需要的Interactable Component

有很多不同的Interactable,详情见官方文档。我们想要实现选择、缩放、移动、和旋转操作,就需要将AR Selection Interactable、AR Scale Interactable、AR Translation Interactable、和AR Rotation Interactable,添加到相应的Prefab中。这里的Prefab是指,当手机相机检测到指定图片/平面/实物,你想要展示的那个虚拟物体做成的Prefab,并且这个Prefab需要有合适的Collider Component。

例如:在这里插入图片描述
直接通过Add Component搜索并添加AR Selection Interactable、AR Scale Interactable、AR Translation Interactable、和AR Rotation Interactable即可。我注意到每个Interactable需要设置XR Interaction Manager和AR Session Origin,但我不知道怎么在Prefab中进行设置。后来我发现不设置也是可以的,就空着,然后程序在运行时会自动找到。

在这里插入图片描述

第五步:根据需要,将Prefab和某种track manager连系在一起

以上步骤我们都在完成“并允许用户在屏幕上使用手势(例如双指捏合)对该虚拟模型进行选择、缩放、移动、和旋转操作”这一目标。但是怎么样完成“手机相机检测到指定图片/平面/实物之后,虚拟模型随之出现”呢?

对于图片和实物而言,可以在AR Session中添加AR Tracked Image Manager 或者AR Tracked Image Manager,并且将第四步设置好的Prefab直接从Prefab文件夹中拖到Tracked Image Prefab中,就可以了。关于AR Tracked Image Manager中Refered Image Library的简单设置请参考这篇文章。

然后编译就可以运行了!

对于平面检测而言,其实都不用上面的第四步。取而代之的是,在AR Session中添加一个AR Placement Interactable (经过实验之后,它是可以实现选择、缩放、移动、和旋转的),然后把Prefab拖到Placement Prefab参数中,即可。ARFoundation为这种情况提供了一个例子可供参考。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring】——14、如何使用@Value注解为bean的属性赋值呢?

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

flask之g对象、flask-session使用、数据库连接池、信号

目录 g对象 flask-session的使用 数据库连接池 flask中集成mysql wtfroms使用(了解) 信号 g对象 全称global,是一个全局对象在此次请求过程中一直有效,其实就是请求的上下文从请求进来就一直存在直到请求结束,所以在当次请求过程中&…

华为云WeLink云空间,企业的多啦A梦「百宝袋」办公助手

我们知道,源自华为19万员工的数字化办公实践的华为云WeLink,作为新一代智能工作平台、远程办公平台、移动办公平台、协同办公软件,已经给成为企业数字化转型的连接器。今天,我们来聊一聊WeLink提供的一项优质服务——云空间。 We…

论文复现-2代码研读:Black-Box Tuning for Language-Model-as-a-Service

第一步:将作者所给代码跑通。 下载代码,放置在本地文件夹。 报错问题一: 使用hugging face 中loaddataset函数报错。显示connect error。 修改如下:将数据集下载文件.py文件在本地,然后从.py文件中加载数据集。 解决…

【深度学习】PyTorch深度学习实践 - Lecture_13_RNN_Classifier

文章目录一、问题描述二、OurModel三、准备数据3.1 Data Convert3.2 Padding Data3.3 Label Convert四、双向RNN五、PyTorch代码实现5.1 引入相关库5.2 创建Tensors函数5.3 将名字转化为字符列表函数5.4 国家名字数据集对象5.5 RNN(GRU)分类器对象5.6 训…

Nacos--多环境的实现方案

原文网址:Nacos--多环境的实现方案_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Nacos实现多环境的方案。 方案概述 多环境有很多方案,如下: 单租户方案(适用于项目很少的场景) 命名空间区分环境,GR…

Python简介

Python简介 目录1. 概述2. 安装3. 编译器4. 注释5. 缩进6. 编码规范7. 基本输入输出使用print()函数输出使用input()函数输入8. 练习1. 概述 Python的中文意思是蟒蛇,python是一种面向对象的解释型的计算机程序设计语言。支持面向过程,面向对象&#xff…

(十四)Vue之收集表单数据

文章目录v-model的三个修饰符收集文本框收集单选按钮收集复选框收集下拉列表收集文本域演示程序Vue学习目录 上一篇:(十三)Vue之监测数据改变的原理 v-model的三个修饰符 v-model的三个修饰符: lazy:失去焦点再收集…

MIT6.830-2022-lab2实验思路详细讲解

目录一、Exercise1.1、Exercise1: Filter and Join1.2、Exercise2: Aggregates1.3、Exercise 3:HeapFile Mutability1.4、Exercise 4:Insertion and deletion1.5、Exercise 5: Page eviction二、总结一、Exercise 1.1…

人工智能课后作业_python实现A*算法实现8数码问题(附源码)

3 A*算法实现8数码问题 3.1算法介绍3.2实验代码3.3实验结果3.4实验总结 3.1算法介绍 Astar算法是一种求解最短路径最有效的直接搜索方法,也是许多其他问题的常用启发式算法。它的启发函数为f(n)g(n)h(n),其中,f(n) 是从初始状态经由状态n到目标状态的…

竞拍拍卖管理系统

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 网站前台:关于我们、联系我门、公告信息、拍卖物品,拍卖完成 管理员功影: 1、管理关…

信贷反欺诈体系介绍及其策略规则应用

在信贷业务的风控体系中,反欺诈始终是一个重要话题,与信用评估构成的贷前风控两大模块,对于贷前风险的防范控制发挥着决定性作用。反欺诈虽然在理解层面上感觉略显简单,但由于场景的复杂性与丰富度,使得反欺诈在研究开…

PD QC快充诱骗取电方案:输出9V12V15V20V

手机快充充电器或充电宝,在没有与手机通讯时,快充充电器相当于普通的充电器只输出5V电压,要想得到充电器的9V/12V等电压,可以使用快充取电电路。 或者也可以使用电子元件来搭建诱骗电路,但是和专用的取电芯片方案相比&…

Part 1:RPA的发展历程

Robot一词的来源 捷克科幻小说家卡雷尔恰佩克创作,于1921 年在布拉格首映的《罗素姆万能机器人》作品中首次出现“robot”(机器人)一词。这个词源于捷克语的“robota”,意思是“苦力”。恰佩克的机器人原本是为它们的人类主人服务…

Python使用Selenium Webdriver爬取网页所有内容

Python使用Selenium Webdriver爬取网页所有内容一、为什么我抓不到网页的全部html内容二、Selenium的基本使用三、使用Selenium抓取全部HTML一、为什么我抓不到网页的全部html内容 有时候,我们在用urllib或者requests库抓取页面时,得到的html源代码和浏…

4年测试在岗,薪资却被春招来的年轻人超过了,其实你一直在假装努力~

最近和一位同行朋友聊天,一开始大家也没有谈工作,毕竟是出来聚聚,放松一下,吃饭的时候,喝了点小酒,酒过三巡,这个朋友开始诉苦水,大概意思嘞,我给大家概况一下&#xff0…

STM32F4的关键要点分析

1. 从以上截图信息可以看出: 1.当外设数据宽度和内存数据宽度不相等时,要传输的数据项数目的数据宽度由外设数据宽度确定; 2.在直接模式下(不使用FIFO),不能进行数据的封装/解封,且源数据宽度和…

Docker-Docker安装nginx

目录 一,容器之间的相互通信 ping 1.1 两个容器在同一网段 1.2 两个容器在不同网段 二,安装Nginx 2.1 nginx是什么 安装步骤 2.4 部署前端项目 上传项目 步骤 一,容器之间的相互通信 ping 1.1 两个容器在同一网段 1.2 两个容器在不同网段…

旋转机械 | 基于ANSYS WB平台的滑动轴承分析工具(一)

导读:本文主要针对Tribo-X inside ANSYS的功能及各方向应用实例进行介绍,限于篇幅关系会分五篇进行介绍,第一篇主要结合软件的需求、理论、功能及应用方向进行介绍,第二篇至第五篇将结合具体应用方向的示例进行介绍。本篇为第一篇…

软件测试工程师的简历项目经验该怎么写?

想要找一份高薪的软件测试工作,简历项目必不可少(即使是应届生,你也要写上实习项目)。所以很多自学的朋友找工作时会碰到一个令人颇感绝望的拦路虎:个人并没有实际的项目工作经验怎么办? 怎么办&#xff1…