Unity Apple Vision Pro 保姆级开发教程-准备阶段

视频教程:

Unity PolySpatial 开发Apple Vision Pro教程, 三十分钟快速了解


Unity Vision Pro 中文课堂教程地址:

Unity3D Vision Pro 开发教程【保姆级】 | Unity 中文课堂


开发Apple Vision Pro 使用原生开发和unity 开发有什么区别

  • 如果你的项目需要充分利用 Apple Vision Pro 的独特功能、追求最佳的性能表现,或者针对特定于 VisionOS 的开发场景,原生开发可能是更好的选择。

  • 如果你想要快速开发一个可在多个 XR 平台上运行的应用,或者你已经熟悉 Unity 并且希望减少开发复杂性,Unity 开发会是更方便的选择。

  • 详细说明

软硬件设备

  • Apple Silicon Mac for development - (M系列芯片的Mac电脑)

    • Unity 2022 LTS(2022.3.18f1 或更新版本) - Unity Pro(我使用的是2022.3.31f1,这个在hub上没有,需要去官网下载,国际版本下载地址 Download Archive)

  • Xcode 15.3 (15E204a) https://developer.apple.com/cn/xcode/

  • visionOS 1.0 (21N301) SDK 或更新版本

账号要求

Apple Developer 账户

https://developer.apple.com/account

Unity Pro/Unity Enterprise/Unity Industry的授权许可证

用于 3D、AR 和 VR 开发的实时工具 | 产品

Unity PolySpatial 官方文档:

Introduction | PolySpatial visionOS | 1.3.9(需要时刻关注开发者文档,因为 PolySpatial 处于早期阶段,在未来可能有些地方会发生变动)

应用程序类型

Unity 在 visionOS 上支持几种不同的应用程序类型,每种类型都有各自的优点:

Windowed

.

在 visionOS 中,用户可以使用窗口来呈现 2D 或 3D 内容,或使用体积来呈现 3D 内容和对象。Unity 将存在于这些窗口中的应用程序描述为窗口化应用程序。

窗口应用使用 Unity 自己的渲染管道,即内置渲染管道或通用渲染管道。这样您就可以访问所有标准 Unity 功能,但无法使用 visionOS 特定功能(例如立体渲染和悬停效果)或 AR 特定功能(例如关节跟踪和锚点)。

默认情况下,如果您构建针对 visionOS 平台的 Unity 应用程序而未通过 XR 插件管理器启用 PolySpatial Runtime 或 visionOS 插件,则您的 Unity 内容将成为 visionOS 中的窗口应用程序。

如果您启用了 visionOS 插件,但仍想制作窗口应用程序,则必须将下的应用程序模式更改Project Settings > XR Plug-in Management > Apple visionOS > App ModeWindowed - 2D Window

Fully Immersive VR

借助 Unity,用户可以利用熟悉的工作流程为 VisionOS 构建完全沉浸式的体验,包括虚拟现实游戏或完全虚拟环境。如今,Unity 提供了广泛的功能和 API,可用于为 visionOS 开发完全沉浸式的体验。这些软件包包括:

  • visionOS plug-in

  • XR Interaction Toolkit

  • XR Core Utilities

  • Input System

  • VR project template

  • Hand tracking

在 Unity 中构建 VR 内容后,只需在XR Plug-in Management 窗口中选择visionOS - Fully Immersive ,选择并构建 visionOS 平台,重新编译原生插件,即可生成 Unity XCode 项目文件。从这里开始,您将继续在 XCode 中进行开发,您可以探索诸如在窗口内容和完全沉浸式内容之间转换等概念。

请注意,Unity 仍在努力实现与 XCode 上的 Metal API 功能对等,因此您可能会看到 Metal 的 API 验证层发出的警告。要解决此问题,您可以通过 XCode 的scheme 菜单关闭 Metal API 验证层。

PolySpatial Mixed Reality

visionOS 上的混合现实内容可以采用两种模式之一,我们称之为“ shared 共享”模式和“ exclusive 独占”模式。

ModesDescription
共享
(Shared)
在"shared"模式下,您的应用程序与共享现实世界空间中活动的任何其他应用程序共存。每个应用程序都有一个或多个bounded volumes(见下文),但没有无界体积。这些体积的位置和方向(包括相对位置和绝对位置)对应用程序来说都是不透明的。此模式下的输入仅限于通过SpatialPointerDevice的“3D touch”机制(请参阅 Input)。此外,在此模式下,手部位置、平面或世界网格等ARKit信息不可用。
独有的
(Exclusive)
在“exclusive”模式下,除了先前创建的有界体积外,单个应用程序还通过unbounded volume(见下文)控制整个视图。在此模式下,应用程序知道其体积的相对位置,可以访问设备的所有AR功能,并使用手/关节位置信息直接驱动输入和交互。该应用程序仍然无法移动有界体积或调整有界体积的大小,因此必须依靠用户来确保有界体积不会与无界体积内的有意义的内容重叠。

Volumes

体积(volumes)是混合现实平台的一个新概念。应用程序可以创建一个或多个体积,用于在混合现实空间中显示内容。每个体积都是一个包含 3D 内容的定向框。在visionOS中,用户可以在现实世界的空间中独立移动和缩放体积,而开发人员则无法通过编程来实现。在Unity中,您可以使用称为 VolumeCamera 的Unity组件与Volume进行交互。

ModesDescription
有界体积

(Bounded Volumes)
有界体积具有有限的盒形范围。用户可以在世界空间中移动和转换有界体积,但开发人员不能以编程方式移动和转换。目前,Unity在一个有界体积中的内容将扩展以填充体积的实际大小。

有界体积的输入仅限于SpatialPointerDevice提供的“3D Touch”。请参阅Input。
无界体积

(Unbounded Volumes)
在独占模式下运行时,内容呈现单个无界体积,没有任何剪切边缘。该应用程序拥有整个混合现实视图,没有其他应用程序可见。来自同一应用程序的其他有界体积可以与此无界体积共存。

在无界体积内,应用程序可以请求访问完整的手部跟踪数据。

Unity PolySpatial

Materials

  • Physically based materials

  • Custom materials

        手写着色器不支持通过 RealityKit进行渲染,但你可以在Unity的RenderTextures 中使用,然后你可以将RenderTexture,作为纹理输入到Shader Graph 中并通过 RealityKit进行显示

  • Effect materials

Mesh renderers

Renderers

  • MeshRenderer

  • Skinned Mesh Renderer

Pipelines

  • Universal render pipeline

  • Built-in render pipeline

Particle effects

  • Simple: Translated to RealityKit 转换成RealityKit支持的

  • Complex: Translated to meshes 转换成mesh

Sprites

Translated to meshes 转换成mesh

Simulation features

  • Physics 物理

  • Animation and Timeline 动画线

  • Pathfinding 寻路导航网格

  • MonoBehaviours 自定义脚本

  • Other non-rendering features 其他非渲染功能

Input types 支持的输入方式

Look & tap

  1. Requires input colliders 相关对象必须配置输入碰撞器

  2. Look & tap from a distance 从远处看&点击

  3. Direct touch 伸手触摸某个物体

  4. Up to two simultaneous taps 用户最多可以 同时进行两个点击操作

  5. Delivered as World Touch events 可用作 WorldTouch事件其类似于2D点击事件,但有完整的3D位置

Hands and Head pose

Requires Input and Hands packages 底层手部数据通过Unity的Hands包提供,头部位姿通过输入系统提供

Unbounded volumes only 只能在无界空间中使用

Hands require permission 并且访问手势跟踪需要你的App,有接收数据的权限

Augmented reality

Plane detection 平面检测

World mesh 环境网格

Image markers 图片追踪

Unbounded volumes only 只能在无界空间中使用

Bluetooth devices

Keyboards 键盘

Controllers 控制器

Other system-supported devices 其他系统支持的设备

总结示意

开发Apple Vision Pro 原生开发,unity 开发 详细

1. 开发环境与工具链

  • 原生开发(Xcode + iOS SDK):

    • 使用 Xcode 开发环境和 Swift/Objective-C 编程语言。

    • 使用苹果专有的 VisionOS SDK,直接调用 Vision Pro 的所有底层 API 和硬件功能。

    • 更加贴近硬件,能够完全利用 Apple Vision Pro 提供的功能(如 3D 空间感知、眼动追踪、手势识别等)。

    • 提供了更精细的控制和性能优化,尤其适合构建针对 Vision Pro 专属的复杂应用程序。

  • Unity 开发:

    • 使用 Unity 编辑器,开发基于 C# 脚本的跨平台应用。

    • 借助 Unity 的 XR Plugin Management 和 AR Foundation 来支持 Apple Vision Pro。

    • Unity 提供了图形化开发环境,方便进行 3D 场景构建和快速迭代。

    • 由于 Unity 是跨平台引擎,应用开发可以轻松迁移到其他 XR 平台(如 Meta Quest、PICO、HTC Vive)。

2. 开发复杂性

  • 原生开发:

    • 更复杂,因为需要理解和使用 VisionOS 的新概念,比如“空间计算”和 3D 用户界面(spatial computing)。

    • 需要直接操作低层的 API 和图形界面,涉及更多的手动配置和细节控制。

  • Unity 开发:

    • 相对简单,尤其适合开发者已经熟悉 Unity 环境,可以利用 Unity 的可视化编辑器和预制系统进行快速开发。

    • Unity 提供了丰富的第三方资源和插件库,减少了重复造轮子的工作。

3. 性能与优化

  • 原生开发:

    • 性能通常优于 Unity,因为原生应用直接与系统 API 交互,可以最大限度地优化特定硬件。

    • 原生开发允许对设备的特性进行更精细的控制,特别是针对高性能需求的应用程序(如大型 3D 渲染和计算)。

  • Unity 开发:

    • Unity 是跨平台的引擎,尽管方便但有额外的开销。Unity 虽然可以很好地支持 Vision Pro,但性能可能会稍逊于原生开发,尤其是在处理高端图形渲染和复杂的物理模拟时。

    • 不过,Unity 的优化工具(如 Profiler 和 Burst 编译器)可以帮助减少性能损耗。

4. 扩展性与跨平台能力

  • 原生开发:

    • 只能运行在 Apple 生态系统中,应用无法轻易移植到其他 AR/VR 平台(如 Meta Quest 或微软 HoloLens)。

    • 强依赖于苹果的框架和工具,但可以利用苹果独特的硬件和软件特性(如眼动追踪、LIDAR 等)。

  • Unity 开发:

    • 更适合跨平台开发,尤其是如果计划将应用移植到其他 XR 设备。

    • Unity 可以为多个平台构建不同版本的应用,具备更高的扩展性。

5. 开发资源与支持

  • 原生开发:

    • 主要依赖苹果官方文档和开发者社区的支持,资源相对有限。

    • VisionOS SDK 及其相关工具较新,因此开发者可能需要花费更多时间去探索。

  • Unity 开发:

    • Unity 社区庞大,文档完善,学习资料和教程丰富。

    • Unity 生态系统中有大量的插件、工具包和现成的资源,可以加速开发过程。

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

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

相关文章

LSTM反向传播及公式推导

先回顾一下正向传播的公式: 化简一下: 反向传播从下到上逐步求偏导: 对zt求偏导(预测值和标签值相减): zt对未知数wt,ht,bt分别求偏导: ht对ot,Ct求偏导: ot对Net0求偏导: Net0对w0,b0求偏导: .... 总体的思路就是那个公式从下到上逐步对未知数求偏导: 下面是总体的流程…

【AIGC】ChatGPT与人类理解力的共鸣:人机交互中的心智理论(ToM)探索

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯心智理论(Theory of Mind,ToM)心智理论在心理学与神经科学中的重要性心智理论对理解同理心、道德判断和社交技能的重要性结论 💯乌得勒支大学研究对ChatGPT-4…

【C++篇】类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略

文章目录 前言 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗&#xff1…

软件设计模式------工厂方法模式

工厂方法模式(Factory Method Pattern),又称工厂模式,也叫虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Pactory Pattern),属于类创建型模式。 我们知道…

WIFI实现透传+接线图

单片机通过TX接WIFI模块的RX将设置的AT代码写入WIFI模块(连接WIFI调为设备模式(有设备,路由,双模等模式)) WIFI模块将响应信号通过TX通过CH340发给PC的RX 通过STC-ISP或安信可串口调试助手查看响应信息 …

Golang | Leetcode Golang题解之第495题提莫攻击

题目: 题解: func findPoisonedDuration(timeSeries []int, duration int) (ans int) {expired : 0for _, t : range timeSeries {if t > expired {ans duration} else {ans t duration - expired}expired t duration}return }

qt QGraphicsEffect详解

一、QGraphicsEffect概述 QGraphicsEffect通过挂接到渲染管道并在源(例如QGraphicsPixmapItem、QWidget)和目标设备(例如QGraphicsView的视口)之间进行操作来更改元素的外观。它允许开发者为图形项添加各种视觉效果,如…

Java网络编程-简单的API调用

Get请求 - 无参数 安装依赖库 首先需要安装一个库&#xff1a; Okhttp3&#xff0c;这是一个非常流行的 HTTP 库&#xff0c;可以简单、快速的实现 HTTP 调用。 安装 Okhttp3 的方式是在 pom.xml 文件中增加依赖&#xff1a; <!-- https://mvnrepository.com/artifact/co…

【算法】哈希表:49.字母异位词分组

目录 1、题目链接 2、题目介绍 3、解法 初始化设定--图解 步骤图解 4、代码 1、题目链接 49. 字母异位词分组 - 力扣&#xff08;LeetCode&#xff09; 2、题目介绍 3、解法 字母异位词的本质是字符相同但排列不同。因此&#xff0c;我们可以对字符串进行排序&#xf…

YOLOv8实战水果识别【数据集+YOLOv8模型+源码+PyQt5界面】

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对水果数据集进行训练和优化&#xff0c;该数据集包含丰富的水果图像样本&#xf…

零基础Java第七期:方法的使用

一、方法的概念与使用 1.1. 方法的概念 方法就是一个代码片段. 类似于 C 语言中的 "函数"。方法存在的意义&#xff1a; 是能够模块化的组织代码(当代码规模比较复杂的时候)做到代码被重复使用, 一份代码可以在多个位置使用让代码更好理解更简单直接调用现有方法开…

Solidity基础语法

Solidity的在线编辑器&#xff1a;https://remix.ethereum.org/ 一、合约结构 1、SPDX许可标识&#xff1a;指定代码的开源许可 2、pragma指令&#xff1a;声明Solidity版本 3、导入语句&#xff1a;引入其他合约或库 4、合约声明&#xff1a;使用contract关键字 5、状态变量&…

直流和交流变频压缩机工作原理

直流变频压缩机工作原理&#xff1a; 压缩机定子产生旋转磁场与转子永磁磁场直接作用&#xff0c;实现压缩机运转。转子是永磁体&#xff0c;没有线圈/绕组&#xff0c;无需外部供电&#xff0c;不产生电能损耗&#xff0c;效率高、节能&#xff1b;直流变频压缩机属于同步控制…

uboot中mmc是使用

进入uboot的界面后 mmc命令 mmc list #查看有哪些可用的mmc设备 mmc dev 0 #切换到mmc的0设备&#xff0c;一般是指SD卡 ls mmc 0:1 #查看mmc 0设备&#xff08;sd卡&#xff09;中1分区保存的信息 ls mmc 0:2 #查看mmc 0设备&#xff08;sd卡&#xff09;中2分区保存的信…

Leetcode 1129. 颜色交替的最短路径

1.题目基本信息 1.1.题目描述 给定一个整数 n&#xff0c;即有向图中的节点数&#xff0c;其中节点标记为 0 到 n – 1。图中的每条边为红色或者蓝色&#xff0c;并且可能存在自环或平行边。 给定两个数组 redEdges 和 blueEdges&#xff0c;其中&#xff1a; redEdges[i] …

顺序表算法题【不一样的解法!】

本章概述 算法题1算法题2算法题3彩蛋时刻&#xff01;&#xff01;&#xff01; 算法题1 力扣&#xff1a;移除元素 我们先来看这个题目的要求描述&#xff1a; 把与val相同数值的元素移除掉&#xff0c;忽略元素的相对位置变化&#xff0c;然后返回剩下与val值不同的元素个数…

基于SpringBoot+Vue+uniapp的涪陵区特色农产品交易系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的视频演示 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

pytest中@pytest.fixture常用顺序function

ytest中pytest.fixture用法讲解 1、测试函数开始之前2、执行测试函数&#xff1a;3、测试函数结束后&#xff1a; 备注&#xff1a;内容来自chatGPT 在 pytest 中&#xff0c;pytest.fixture 是一个非常强大的功能&#xff0c;用于设置测试所需的环境和状态。它可以通过 scope…

AP上线的那些事儿(1)capwap建立过程、设备初始化以及二层上线

1、了解FITAP与AC的建立过程 之前我们已经知道了FATAP与FIT是一对双胞胎一样的兄弟&#xff0c;FAT哥哥能够直接独立使用当AP桥接、路由器等&#xff0c;而弟弟FIT则比较薄弱&#xff0c;独自发挥不出功效&#xff0c;需要一位师傅&#xff08;AC&#xff09;来带领&#xff0c…

ssm配置模式

新版 用Java类&#xff0c;全注解demo案例 1. AppConfig.java (Spring主配置类)package com.example.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.cont…