【重制版】Unity Meta Quest 一体机开发(一):前期准备,Meta XR SDK导入和环境配置,配置玩家物体

news2024/11/15 9:43:29

文章目录

  • 📕教程说明
  • 📕Meta XR SDK 介绍
  • 📕前期准备
    • ⭐开启开发者模式
      • ⚡在 Meta 官网申请开发者
      • ⚡在 Meta Quest 手机 APP 开启开发者
    • ⭐电脑需要下载的软件
      • ⚡Meta Quest Link(以前叫做Oculus PC客户端)
      • ⚡Oculus ADB Drivers
      • ⚡SideQuest
      • ⚡87VR助手
      • ⚡Meta Quest Developer Hub
      • ⚡Unity Hub
  • 📕Unity 操作
    • ⭐Unity 环境配置
      • ⚡添加安卓模块
      • ⚡Building Settings 里将平台切换成安卓
      • ⚡导入 Meta XR SDK
      • ⚡Project Setup Tool 自动修复环境
      • ⚡Quality 设置
      • ⚡XR Plug-in Management
      • ⚡修改全局配置文件
    • ⭐配置玩家物体
    • ⭐例:快速配置可以被抓取的物体
    • ⭐将 Unity 程序打包到头显中运行
    • ⭐导入样例场景

此教程相关的详细教案,文档,思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量 XR 开发者社区,博主目前在内担任 XR 开发的讲师。该社区提供专人答疑、完整进阶教程、从零到一项目孵化保姆服务(包含产品上架App lab)、投资|融资对接、工程文件下载等服务。

社区链接:
SpatialXR社区:完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子

在这里插入图片描述


📕教程说明

这期教程我将介绍使用 Unity 开发 Meta Quest 应用的前期准备,Meta XR SDK 导入 Unity 和环境配置,以及如何配置玩家物体。

Unity 版本:2022.3.20f1

视频讲解链接:
(上)开发者模式,前期软件准备 https://www.bilibili.com/video/BV1kw4m1D7yF

(下)导入Meta XR SDK,配置玩家物体 https://www.bilibili.com/video/BV1LJ4m1P7gr

注:在制作教程的时候 SDK 版本还是 v64 版本,但是教程发布的时候,SDK的版本已经更新到了 v65 版本。不过相关的配置流程没有发生变化,所以大家可以放心看接下来的部分。


📕Meta XR SDK 介绍

在这里插入图片描述


📕前期准备

在这里插入图片描述

⭐开启开发者模式

⚡在 Meta 官网申请开发者

官方文档中的指导:https://developer.oculus.com/documentation/native/android/mobile-device-setup/

在这里插入图片描述
在这里插入图片描述
账号认证:(我之前使用的是手机号认证)
在这里插入图片描述

创建组织:
在这里插入图片描述

⚡在 Meta Quest 手机 APP 开启开发者

这个步骤非常重要!
在这里插入图片描述
在这里插入图片描述
开启开发者模式后,可以在 Quest 头显里的 “设置>系统” 中检查是否有“开发者”选项(截图源于Quest v64 系统)

在这里插入图片描述

不过有时候虽然头显里有开发者选项,主要还是看手机 APP 里的开发者模式是否是开启的。

⭐电脑需要下载的软件

⚡Meta Quest Link(以前叫做Oculus PC客户端)

用于串流调试,直接通过头显看到Unity中运行的画面。

串流:将电脑中显示的画面传输到头显中。
有线串流:通过USB线(推荐USB3.0)将头显与电脑连接在一起
无线串流:通过Wi-Fi将头显与电脑连接在一起

下载链接:https://www.meta.com/zh-cn/help/quest/articles/headsets-and-accessories/oculus-rift-s/install-app-for-link/

串流需要的电脑配置(推荐用 Windows,Mac 目前无法串流)
https://www.meta.com/zh-cn/help/quest/articles/headsets-and-accessories/oculus-link/requirements-quest-link/

在这里插入图片描述

Meta Quest Link软件打不开,一直在加载的解决方法:

在这里插入图片描述

一般是网络问题。

关键词
方法一:代理软件开隧道模式 TUN Mode
方法二:改 Host 文件

Meta Quest Link软件设置(重要)
在开启开发者模式的前提下:
在这里插入图片描述
在这里插入图片描述

⚡Oculus ADB Drivers

驱动软件
https://developer.oculus.com/downloads/package/oculus-adb-drivers/

在这里插入图片描述

⚡SideQuest

可以用于下载第三方应用,Quest 文件夹管理,投屏。

在这里插入图片描述

⚡87VR助手

SideQuest 替代品,作用和 SideQuest 类似,有中文界面
在这里插入图片描述

⚡Meta Quest Developer Hub

更多的开发者调试功能,应用上架商店 (需要科学上网)

在这里插入图片描述

⚡Unity Hub

用于管理不同版本的 Unity 编辑器。

国际版:
版本号后缀没有 c,导入 Meta XR SDK 比较方便(https://unity.com/download,需要科学上网才能下载到国际版,注意下载的 Unity Hub 版本后缀)

国服版:
大陆 ip 默认下载的是国服版,版本号后缀带有 c,对国内社区比较方便,过去导入 Meta XR SDK 不方便,但是 SDK v65 及以后版本解决了以前版本的导入问题

在这里插入图片描述

如上图所示,上面的是国际版,下面的是国服版。

Meta XR SDK 的导入方式:
方法一:在 Unity 的资源商店中将 SDK 导入自己的资源库,然后从 Unity 中的 Package Manager 导入到项目中

方法二:从 Meta 官网(https://npm.developer.oculus.com/)将 SDK 下载到本地,然后在 Unity 的 Package Manager 中通过 Add package from tarball 从本地导入到项目中(SDK v65之前国服版 Unity 需要使用这种导入方式,但是 v65 及以后的版本可以直接使用第一种导入方式)。


📕Unity 操作

在这里插入图片描述

⭐Unity 环境配置

⚡添加安卓模块

第一次安装 Unity 编辑器时会有添加模块的过程。如果你已经安装了 Unity 编辑器,可以到 Unity Hub 的安装里找到对应版本的编辑器,然后添加模块,如下图所示:

在这里插入图片描述
安装安卓相关的模块,因为 Quest 一体机的安卓系统,相当于我们要开发安卓应用。
在这里插入图片描述

⚡Building Settings 里将平台切换成安卓

点击菜单栏的 File > Build Settings,将 Platform 切换成安卓:

在这里插入图片描述
在这里插入图片描述

⚡导入 Meta XR SDK

Meta XR SDK v65 及以后的版本,不管是国际版的 Unity,还是国服版的 Unity,应该都可以直接从 Unity 资源商店里进行导入。

首先打开 Unity Asset Store 资源商店的官网,将 Meta XR All-in-One SDK 添加到自己的资源库:

在这里插入图片描述
在这里插入图片描述
接下来打开 Unity 的 Window > Package Manager,选中 My Assets,安装 Meta XR All-in-One SDK

在这里插入图片描述
在这里插入图片描述

安装完成后它会自动导入里面包含的 Meta XR SDK。

⚡Project Setup Tool 自动修复环境

点击菜单栏的 Edit > Project Settings,找到 Meta XR,点击安卓端和 PC 端的 Fix All 和 Apply All,直到所有元素变绿,Project Setup Tool 能自动帮我们配置开发环境。

在这里插入图片描述

⚡Quality 设置

点击菜单栏的 Edit > Project Settings,找到 Quality,官方是推荐把 Anti-Aliasing 设为 4x Multi Sampling:

在这里插入图片描述

⚡XR Plug-in Management

如果之后你在 PC 串流调试的时候遇到只有一只眼睛渲染的情况,你可以把 XR Plug-in Management 下的 Oculus 的 PC 端的 Rendering Mode 设为 Multi Pass,但是需要注意,Project Setup Tool 会将它自动改回 Single Pass instanced,所以如果出现了上述的问题,需要手动修改。

在这里插入图片描述

另外安卓端的 Target Device 可以勾选上自己的设备:

在这里插入图片描述

⚡修改全局配置文件

在 Project 窗口中的 Assets >Oculus 文件夹下找到 Oculus Project Config,Target Devices 也勾选上自己开发的设备型号,并且将 Hand Tracking Support 改为 Controller And Hands 或 Hands Only 来开启手势追踪。

在这里插入图片描述
在这里插入图片描述

⭐配置玩家物体

配置玩家物体有多种方式,比如使用 Building Block(相关教程:Unity Meta XR SDK 快捷配置开发工具【Building Block/Quick Action/OVRCameraRigInteraction】),或者自己从头开始手动配置。而这期教程会介绍另一种简单的方法:

我们在 Project 窗口中搜索 OVRCameraRigInteraction 物体,搜索选项改为 All 或者 In Packages(因为 Meta XR SDK 的大部分资源存放在 Packages 文件夹下),然后将它添加到场景中:

在这里插入图片描述
这个是 Meta XR Core SDK 中提供的一个玩家物体,玩家物体就代表了我们在 XR 世界中的自己,而这个玩家物体集成了大部分的手柄和手势追踪交互功能,和交互相关的功能来自于 Meta Interaction SDK。

在这里插入图片描述

上图展示了一部分手势追踪交互相关的物体,可以看到该玩家物体上有许多 Interactor 后缀的物体。XR 的交互一般有两个对象参与:Interactor(发起交互的对象)和 Interactable(可以被交互的对象),Interactor 一般在玩家物体上,因为交互动作由玩家发起。Interactable 一般在可交互的物体上。那么有了 OVRCameraRigInteraction 这个玩家物体,我们基本就不用配置 Interactor 了,只需要把注意力放在给物体添加 Interactable 相关的脚本。

⭐例:快速配置可以被抓取的物体

玩家物体上已经有抓取相关的 Interactor,那么如果想要配置一个可被抓取的物体,是有比较便利的方法的。我们可以在 Unity 场景中添加一个物体,然后在 Hierarchy 面板中鼠标右键物体,选择 Interaction SDK > Add Grab interaction:

在这里插入图片描述

这时候会跳出一个窗口,首先点击 Fix All,它会在物体身上添加一些抓取需要的前置脚本,然后点击 Create:

在这里插入图片描述
这个时候,物体会多出一个子物体,这个子物体集成了抓取所需要的脚本:

在这里插入图片描述
在这里插入图片描述

这个时候运行程序,就能够看到抓取的功能。

⭐将 Unity 程序打包到头显中运行

点击菜单栏的 File > Build Settings,将要打包的场景放入Build Settings 中的Scenes In Build(可以点击 Add Open Scene,会自动添加当前的场景),头显与电脑连接成功后点击 Build And Run,将APK安装进头显,需要确保通过手机 APP 开启开发者模式后(有时候 Quest 系统更新,手机 APP 中的开发者模式会被关闭,要重新打开一下),Unity才能识别到头显设备。

在这里插入图片描述

⭐导入样例场景

与交互相关的场景用上了 Interaction SDK,但是它的样例场景包需要在 Unity 资源商店中额外导入,叫做 Meta XR Interaction SDK OVR Samples,然后在 Unity 的 Package Manager 中点击 Samples,手动将下方的样例场景文件导入到项目中:

在这里插入图片描述
导入的样例在 Assets 文件夹下。

在这里插入图片描述

其他 SDK 的样例场景也是在 Package Manager 找有没有 Samples 选项。

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

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

相关文章

Overleaf中出现文字越界、越下届、没有正确分页、换页的原因和解决方法

在使用overleaf中,我偶尔会遇到如标题所说的情况,也如图所示: 后来发现,是因为这一页前面是一个表格,所以怀疑是表格的格式导致的。所以让chatgpt帮我更换了表格的格式,成功解决问题。 对于问题可能的成因…

【C语言】10.C语言指针(1)

文章目录 1.内存和地址1.1 内存1.2 究竟该如何理解编址 2.指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引⽤操作符(*)2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引⽤操作符 2.3 指针变量的⼤⼩ 3.指针变量类型的意…

docker 进入容器报错OCI runtime exec failed

今天进入docker容器的时候一直报错 OCI runtime exec failed: exec failed: unable to start container process: exec: “/bin/bash”: stat /bin/bash: no such file or directory: unknown 执行命令 docker exec -it 容器id /bin/sh 可进入

ThreadPoolExecutor线程池使用以及源码解析

文章目录 1. 引子2. 线程池源码分析2.1. 总览2.2. Executor2.3. ExecutorService2.4. AbstractExecutorService2.5. ThreadPoolExecutor构造函数核心参数阻塞队列拒绝策略核心属性线程池状态Worker 类execute() 方法addWorker() 方法runWorker() 方法getTask() 方法processWork…

【InternLM实战营第二期笔记】02:大模型全链路开源体系与趣味demo

文章目录 00 环境设置01 部署一个 chat 小模型02 Lagent 运行 InternLM2-chat-7B03 浦语灵笔2 第二节课程视频与文档: https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 视频和文档内容基…

运算符优先级详解:从一元到布尔运算的全面指南

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、一元运算符:最高优先级 三、二元运算符:紧随其后的优…

【vue】el-select选择器实现宽度自适应

选择器的宽度根据内容长度进行变化 <div class"Space_content"><el-selectv-model"value":placeholder"$t(bot.roommessage)"class"select"size"small"style"margin-right: 10px"change"selectcha…

分布式Id/框架/发号器一文介绍

文章目录 一、分布式id介绍1、什么是分布式id2、分布式id的特点 二、UUid生成算法1、JDK UUID2、Snowflake 雪花算法3、PearFlower 梨花算法4、Mist 薄雾算法 三、常见发号器服务1、数据库1&#xff09;自增2&#xff09;号段模式 2、NoSQL 四、常见框架1、百度UIDGenerator2、…

01主动安全系统

“安全”一直是车主对车辆考核的重要指标。车辆安全可以分为从主动安全和被动安全两个方面进行分类。今天就来说说汽车主动安全系统的那些事儿。 01.什么是主动安全系统&#xff1f; 主动安全是指尽量自如地操纵控制汽车的安全系统措施。无论是直线上的制动与加速还是左右打方…

粤嵌—2024/5/21—打家劫舍(✔)

代码实现&#xff1a; int rob(int *nums, int numsSize) {if (numsSize 1) {return nums[0];}if (numsSize 2) {return fmax(nums[0], nums[1]);}int dp[numsSize];dp[0] nums[0];dp[1] fmax(nums[0], nums[1]);for (int i 2; i < numsSize; i) {dp[i] fmax(dp[i - 1…

Java核心: 脚本引擎和动态编译

静态语言和动态语言的在相互吸收对方的优秀特性&#xff0c;取人之长补己之短。脚本引擎和动态编译就是其中一个关键特性&#xff0c;扩展了Java的能力边界。这一篇我们主要讲两个东西: ScriptEngine&#xff0c;执行脚本语言代码&#xff0c;如JavaScript、Groovy JavaCompile…

LeetCode:78.子集

解答 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:res[[]]for i in nums:res[[i]num for num in res]return res代码解释 这段代码定义了一个名为Solution的类&#xff0c;并在其中定义了一个名为subsets的方法。该方法接受一个整数列表nums作…

TOTP 算法实现:双因素认证的基石(C/C++代码实现)

双因素认证&#xff08;Two-Factor Authentication, 2FA&#xff09;扮演着至关重要的角色。它像是一道额外的防线&#xff0c;确保即便密码被窃取&#xff0c;不法分子也难以轻易突破。在众多双因素认证技术中&#xff0c;基于时间的一次性密码&#xff08;Time-Based One-Tim…

springmvc Web上下文初始化

Web上下文初始化 web上下文与SerlvetContext的生命周期应该是相同的&#xff0c;springmvc中的web上下文初始化是由ContextLoaderListener来启动的 web上下文初始化流程 在web.xml中配置ContextLoaderListener <listener> <listener-class>org.springframework.…

摸鱼大数据——Hive基础理论知识——Hive环境准备

Hive环境准备 1、shell脚本执行方式 方式1: sh 脚本 注意: 需要进入脚本所在目录,但脚本有没有执行权限不影响执行 方式2: ./脚本 注意: 需要进入脚本所在目录,且脚本必须有执行权限 方式3: /绝对路径/脚本 注意: 不需要进入脚本所在目录,但必须有执行…

记录一次Netty的WSS异常

概述 业务场景 应用通过 WSS 客户端连接三方接口。在高并发压测时&#xff0c;出现了请求服务器写入失败的异常&#xff0c;该异常是偶发&#xff0c;出现的概率不到千分之一&#xff0c;异常如下图所示。 问题概述 注意&#xff1a; 因为握手是通过 http 协议进行的。所以…

在AndroidStudio创建虚拟手机DUB-AI20

1.DUB-AI20介绍 DUB-AL20是华为畅享9全网通机型。 华为畅享9采用基于Android 8.1定制的EMUI 8.2系统&#xff0c;最大的亮点是配置了1300万AI双摄、4000mAh大电池以及AI人脸识别功能&#xff0c;支持熄屏快拍、笑脸抓拍、声控拍照、手势拍照等特色的拍照功能&#xff0c;支持移…

1960-2022年世界银行WDI面板数据(1400+指标)

1960-2022年世界银行WDI面板数据&#xff08;1400指标&#xff09; 1、时间&#xff1a;1960-2022年 2、来源&#xff1a;世界银行WDI 指标&#xff1a;包括健康、公共部门、农业与农村发展、城市发展、基础设施、外债、性别、援助效率、教育、气候变化、环境、社会保护与劳…

阿里云百炼大模型使用

阿里云百炼大模型使用 由于阿里云百炼大模型有个新用户福利&#xff0c;有免费的4000000 tokens&#xff0c;我开通了相应的服务试试水。 使用 这里使用Android开发了一个简单的demo。 安装SDK implementation group: com.alibaba, name: dashscope-sdk-java, version: 2.…

【回忆版】数据科学思维与大数据智能分析 2024考试

填空&#xff08;18分&#xff09;18个 1.对数变换对大数值的范围进行压缩&#xff0c;对小数值的范围进行扩展 2.提取出大量高频率项与低频率项相关联的虚假模式&#xff0c;即交叉支持&#xff08;cross-support&#xff09;模式 3.信息论中&#xff08;&#xff09; 4.几种…