视频教程:
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的授权许可证
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 Mode
为Windowed - 2D Window
。
Fully Immersive VR
借助 Unity,用户可以利用熟悉的工作流程为 VisionOS 构建完全沉浸式的体验,包括虚拟现实游戏或完全虚拟环境。如今,Unity 提供了广泛的功能和 API,可用于为 visionOS 开发完全沉浸式的体验。这些软件包包括:
在 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 独占
"模式。
|-----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Modes | Description |
| 共享 (Shared) | 在"shared"模式下,您的应用程序与共享现实世界空间中活动的任何其他应用程序共存。每个应用程序都有一个或多个bounded volumes(见下文),但没有无界体积。这些体积的位置和方向(包括相对位置和绝对位置)对应用程序来说都是不透明的。此模式下的输入仅限于通过SpatialPointerDevice的"3D touch"机制(请参阅 Input)。此外,在此模式下,手部位置、平面或世界网格等ARKit信息不可用。 |
| 独有的 (Exclusive) | 在"exclusive"模式下,除了先前创建的有界体积外,单个应用程序还通过unbounded volume(见下文)控制整个视图。在此模式下,应用程序知道其体积的相对位置,可以访问设备的所有AR功能,并使用手/关节位置信息直接驱动输入和交互。该应用程序仍然无法移动有界体积或调整有界体积的大小,因此必须依靠用户来确保有界体积不会与无界体积内的有意义的内容重叠。 |
Volumes
体积(volumes)是混合现实平台的一个新概念。应用程序可以创建一个或多个体积,用于在混合现实空间中显示内容。每个体积都是一个包含 3D 内容的定向框。在visionOS中,用户可以在现实世界的空间中独立移动和缩放体积,而开发人员则无法通过编程来实现。在Unity中,您可以使用称为 VolumeCamera 的Unity组件与Volume进行交互。
|--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Modes | Description |
| 有界体积 (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
-
Requires input colliders 相关对象必须配置输入碰撞器
-
Look & tap from a distance 从远处看&点击
-
Direct touch 伸手触摸某个物体
-
Up to two simultaneous taps 用户最多可以 同时进行两个点击操作
-
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 生态系统中有大量的插件、工具包和现成的资源,可以加速开发过程。
-