【Unity】创建一个自己的AR安卓程序
目录
- 1 环境配置
- 2 下载官方提供的AR Starter工程
- 3 AR Starter工程中的包以及打包设置
- 3.1 Package Manager
- 3.2 Player Settings
- 4 创建一个新的AR场景
- 5 AR场景中的物体
- 6 在unity中运行AR场景
- 7 在AR场景的基础上添加自己的想法
- 7.1 修改Cube的旋转速度/方向
- 7.2 将Cube替换为其他物体
- 8 打包至安卓手机上运行
1 环境配置
Unity版本:2021.3.1f1 LTS
可在此处通过打开Unity Hub下载
安装过程中提示添加模块时,需要选择Android Build Support及其子模块。

2 下载官方提供的AR Starter工程
zip下载位置在此,点击即可下载。
下载完成解压后,即可通过Hub打开该工程。
3 AR Starter工程中的包以及打包设置
3.1 Package Manager
打开该工程的包管理器(Windows→Package Manager),选择工程中的包(In Project),可以观察到,相比于普通的项目,多了以下的这些包:

其中,URP包表示该项目是URP管线项目,其他的包:
- AR Foundation:提供了用于在Unity中快速构建AR交互相关的类和GameObjects。
- ARCore:安卓的AR框架。AR Foundation会与ARCore相联系以在安卓设备上获得AR功能。
- ARKit:苹果的AR框架。AR Foundation会与ARKit相联系以在苹果设备上获得AR功能。
- XR Plugin Management:管理ARCore和ARKit的工具。

目前,ARKit比ARCore支持更多的功能,包含3D物体追踪以及身体追踪。
3.2 Player Settings
打开该工程的项目设置(Edit→Project Settings),在左侧侧边栏选择Player,可以在安卓图标的面板下对项目进行设置。
在Other Settings中可以观察到有如下的一些更改:
-
移除了安卓的Vulkan图形API,因为ARCore尚不支持。

-
设置安卓支持的最低级别API。
-
将脚本后端设置为IL2CPP而不是Mono,以支持64位。
-
将目标架构设置为ARM64以满足Google Play的64位要求。

4 创建一个新的AR场景
项目中预制了一个AR模板场景,我们可以基于该场景创建自己的AR场景。
在Assets的Scene文件夹下使用Ctrl+N新建一个Scene(或者File→New Scene),选择AR场景,点击Create创建:

这样,就可以在该新建的AR Scene中添加自己的模型了,使用Ctrl+S保存该场景并为其命名。
如果不对该场景进行修改,直接打包出来安装在安卓手机上的话,那么你将看见一个旋转的立方体漂浮在空中。
安卓手机在打开应用后,会提示安装Google Play Services for AR,到应用商店安装好后再开启应用,允许应用使用摄像机,就会发现有一个旋转的立方体是固定在一个位置在旋转。
5 AR场景中的物体
在一个经典的3D场景中,unity会自动为我们创建2个物体:主摄像机Main Camera以及方向光Directional Light。
而对于AR场景来说,将会有这些物体:

- AR Session Origin:空间中的AR设备。当用户在现实世界移动或旋转AR设备时,AR Session Origin在unity场景中也会相应的移动或旋转。
- AR Camera:AR Session Origin的子物体,也即AR场景中的主摄像机,因此必须给它标上Main Camera的tag。它拥有一些组件使得这个相机能够在AR中起作用,如AR Pose Driver、AR Camera Manager和AR Camera Background。
- AR Session:是一个Session管理器,包括帧率和与设备的通信。注意,一个场景中只能有一个激活的AR Session。
6 在unity中运行AR场景
-
观察到黑色的背景下,在中心有一个旋转的正方体。打包到手机上运行时,这个黑色背景会被替换成真实世界的环境。

-
观察到一个名为Trackables的物体会作为AR Session Origin的子对象出现。它将用于存储现实世界环境中检测到的任何物体,如追踪到的面孔、平面或点等等。

-
在运行状态下,选中AR Session Orgin物体,并在Inspector面板修改其position以及rotation值,这实际上就是在模拟用户手持着安卓设备在移动。
7 在AR场景的基础上添加自己的想法
7.1 修改Cube的旋转速度/方向
如果要使得Cube旋转得更快些,可以通过修改Cube物体下挂载的Scene Template_Rotate Cube脚本中的Rotate Speed来调整,修改Object Rotation可以调整Cube的旋转方向。

7.2 将Cube替换为其他物体
如果要添加其他物体,或者替换掉Cube,那么可以直接将物体添至AR Camera的可视范围内,为其挂载上Scene Template_Rotate Cube脚本即可。

8 打包至安卓手机上运行
注意,平台需切换至安卓平台。项目按照3.2节配置即可。
相关文章:
【Unity】创建一个自己的AR安卓程序
目录1 环境配置2 下载官方提供的AR Starter工程3 AR Starter工程中的包以及打包设置3.1 Package Manager3.2 Player Settings4 创建一个新的AR场景5 AR场景中的物体6 在unity中运行AR场景7 在AR场景的基础上添加自己的想法7.1 修改Cube的旋转速度/方向7.2 将Cube替换为其他物体…...
游戏平台商店化的功能特点
帮助用户高效的获取游戏以及游戏相关内容是游戏平台的核心,基于这个需求在平台功能的设计上与其他类型产品也有着类似的思路。商店模式的特点诸如百货商店、超市、书店以及其他类型的商店,都会根据推荐、分类两个特点提供商品。 如果把游戏比作书籍&…...
最新前端面试知识点总结-2023(3w+字,长篇幅)
2023-前端面试知识点总结面试题总览javascript相关一、js 代码的常用优化手段二、es5 构造函数与继承三、new 一个对象的过程四、防抖与节流五、promise/A规范概述六、实现一个柯里函数封装七、事件队列八、微任务是哪些宏任务是哪些九、执行js代码时,同步任务、微任…...
离线安装ffmpeg
linux离线安装ffmpeg 获取安装包:[ffmpeg-release](Index of /releases (ffmpeg.org)) 下载最新版本,ffmpeg-4.4.tar.gz 然后传送到服务器上,解压安装 # 解压 tar -zxvf ffmpeg-4.4.tar.gz# 安装 cd ffmpeg-4.4 ./configure --enable-sha…...
位置编码Positional Encoding
位置编码Positional Encoding1.Transformers中的PE2.什么是Transformer位置编码2.1.表格型2.2.相对位置的关系-函数型3.为什么可以表示相对距离?4.其他参考内容全来自于网络总结。 其他参考1其他参考2 1.Transformers中的PE 摘抄自这里。 公式是初中生都看的懂, …...
Java异步注解@Async详解
一、Async注解 Async的作用就是异步处理任务。 在方法上添加Async,表示此方法是异步方法;在类上添加Async,表示类中的所有方法都是异步方法;使用此注解的类,必须是Spring管理的类;需要在启动类或配置类中…...
macOS Big Sur 11.7.5 (20G1225) 正式版 ISO、PKG、DMG、IPSW 下载
本站提供的 macOS Big Sur 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。 2023 年 3 月 27 日 (北京时间 28 日凌晨),…...
硬件语言Verilog HDL牛客刷题day02 组合逻辑部分
1.VL11 4位数值比较器电路 1.题目: 某4位数值比较器的功能表如下。请用Verilog语言采用门级描述方式,实现此4位数值比较器。 2.解题代码: timescale 1ns/1nsmodule comparator_4(input [3:0] A ,input [3:0] B ,output …...
【LM401】ADC采集代码解读
本文主要实现基于LM401模组,,测试ADC低功耗采集,详细解析代码基于计算方式 对于小白理解ADC有更详细的理解 【LM401】ADC采集代码解读1. 单片机ADC与DAC简单理解2. 模组ADC通道介绍3. ADC初始化4. 采集值的计算5.测试结果硬件基于易智联的LM401的LoRa模组…...
CSDN 编程竞赛四十期题解
竞赛总览 CSDN 编程竞赛四十期:比赛详情 (csdn.net) 竞赛题解 题目1、小鱼的航程 有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日)。假设从周x(1<x<7)开…...
【TypeScript学习之路】泛型
【TypeScript学习之路】泛型 文章目录【TypeScript学习之路】泛型写在前面前言一、认识泛型1.1 什么是泛型1.2 泛型函数的使用二、泛型接口与泛型类2.1 泛型接口2.2 泛型类三、泛型约束写在前面 🤗这里是前端程序员小张! 🌻人海茫茫ÿ…...
数据分析学习项目:东京奥运会跳水评论分析
“中国跳水梦之队” ————有关东京奥运会跳水评论分析 导语 第32届夏季奥林匹克运动会于2021年07月23日-2021年08月08日在日本东京举办。 四年一届的奥运会可以说是世界瞩目的盛会,奥运健儿们在赛场上的精神风貌不只是代表了他们自身的运动精神,更昭…...
Winform/Csharp中使用Linq的Where条件筛选、Select字段映射(左外连接并设置无匹配时默认值)、OrderBy(排序并自定义排序规则)
场景 Java8新特性-Stream对集合进行操作的常用API: Java8新特性-Stream对集合进行操作的常用API_streamapi操作集合_霸道流氓气质的博客-CSDN博客 上面讲的是在Java中使用Stream中对集合的常用操作。 在C#中Linq是有对应的类似的api。 完整和详细的用法可自行查…...
Linux-常用的Shell命令
文章目录前言常用的Shell命令文件和目录管理查看文件、目录信息查看文件内容查看文件类型查找文件查找内容查看目录大小创建文件删除文件拷贝文件移动文件创建目录删除目录拷贝目录压缩文件解压文件路径相关操作目录切换显示当前路径用户、用户组管理创建用户删除用户创建用户组…...
Go语言基础:数组定义及循环遍历
前言 大家好,我是沐风晓月,本文go语言入门-掌握go语言函数收录于《go语言学习专栏》专栏,此专栏带你从零开始学习go语言,持续更新中,欢迎点赞收藏。 🏠个人主页:我是沐风晓月 🧑个人…...
【树与二叉树】二叉树顺序结构实现以及堆的概念及结构--详解介绍
📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录1. 二叉树顺序结构2.…...
天狗实战(二)SpringBoot API开发详解 --SpringMVC注解+封装结果+支持跨域+打包(下)
本文目录 前言专栏介绍一、创建SpringBoot项目1.1 添加springboot依赖1.2 创建启动类1.3 创建控制器类1.4 Run 或 Debug二、开发图书管理API2.1 web层BookAdminControllerBookVO2.2 service层BookServiceBookServiceImplBookBO2.3 dal层...
实验一 Windows系统安全实验【网络安全】
实验一 Windows系统安全实验【网络安全】前言推荐实验一 Windows系统安全实验3.1 帐户和口令的安全设置3.1.1 实验目的3.1.2 实验环境3.1.3 实验内容和步骤1. 删除不再使用的帐户并禁用guest帐户2.启用密码策略和帐户锁定策略3.查看“用户权限分配”4.查看“用户组权限分配”5.…...
蓝桥杯正确的解题姿势
在做算法题的过程中最忌讳的就是上来就一顿乱敲,一开始我就是这样,但随着不断的刷题和老师的指导,总结了自己的刷题方法 示例题目 三角回文数 问题描述 对于正整数 n, 如果存在正整数 k使得 n123...kk(k1)/2 , 则 n 称为三角数。例如, 66066 …...
【mysql】性能优化
目录一、硬件与操作系统二、架构设计层面的优化三、mysql程序配置优化四、mysql执行优化一、硬件与操作系统 1.使用高性能cpu,提高计算能力 2.增大可用内存,提高读取能力 3.提高硬盘的读写速度,使用专用的固态硬盘 4.增大网络带宽,…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
