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

news2024/11/27 3:45:40

视频教程:

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.coloradmin.cn/o/2219508.html

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

相关文章

IT监控平台可视化:3D机房与设备监控的革新实践

在信息化高速发展的今天,IT运维行业面临着前所未有的挑战。随着数据中心规模的不断扩大和设备复杂度的日益提升,如何高效、准确地监控和管理这些设备,成为了运维团队亟待解决的问题。IT监控平台的可视化功能,尤其是3D机房与设备监…

客户案例 | Ansys与台积电和微软合作加速光子仿真

Ansys与台积电和微软展开合作,将硅光子器件的仿真和分析速度提高10倍以上 主要亮点 借助使用NVIDIA图形处理单元(GPU)的Microsoft Azure虚拟机,Ansys Lumerical™ FDTD 3D电磁仿真的光子器件仿真速度实现了10倍提升 凭借Azure云…

零基础Java第八期:一维数组(1)

目录 一、 一维数组的基本概念 1.1. 什么是数组 1.2. 数组的创建及初始化 1.3. 数组的使用 二、数组是引用类型 2.1. 初始JVM的内存分布 2.2. 基本类型变量与引用类型变量 2.3. 引用变量的理解 2.4. null 三、数组的应用场景 3.1. 作为函数的参数 3.2. 作为函数的返…

【数据结构】顺序表与链表的区别和各自特点

顺序表与链表的区别 一、结构上二、使用上随机访问在随机位置插入删除空间利用率缓存利用率 应用场景 一、结构上 顺序表: 顺序表的内核是一个数组,所以顺序表在逻辑上,和在物理上都是线性的。 链表: 链表是通过一个个独立的空间…

Linux性能调优之使用BPF工具观测CPU性能指标

写在前面 博文内容涉及工具来自《BPF Performance Tools》 一书,CPU性能指标涉及: 系统短期创建的线程进程跟踪进程线程的CPU运行时长,脱离时长统计线程的运行队列长度,等待延时时间,有多少线程在等待,多核…

python语言入门必须要学习的模块化编程案例游戏---画图案例(三)【源码大全】

彩虹五角星 import turtle #引用turtle库 q turtle.Pen() #构造画笔 turtle.bgcolor("black") …

java基于SpringBoot+Vue+uniapp微信小程序的自助点餐系统的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

(悬臂)梁结构固有频率理论求解

文章目录 0、背景1、梁固有频率的理论解法1.1 简支梁和悬臂梁1.2 其他支撑形式的梁2、支座带旋转弹簧的悬臂梁固有频率求解3、算例及仿真0、背景 为了给风电塔筒结果的ABAQUS模型中添加支座弹簧,需要先搞清楚ABAQUS中弹簧单元的性质。很遗憾,网络上关于土弹簧的资料很少,帮…

【Linux】从 fork() 到 exec():理解 Linux 进程程序替换的魔法

1.前言 进程程序替换是指一个进程用另一个新的可执行程序来替换当前正在执行的程序,这个过程通过通过exec系列函数完成。在Linux或UNIX系统中,进程程序替换通常发生在一个进程通过fork()创建了子进程之后,子进程用exec()函数加载和执行另一个…

HTTP(HyperText Transfer Protocol)协议

前言 HTTP作为应用层协议,定义了客户端与服务器之间的通信规则,使得浏览器或其他客户端程序能够请求并获取Web服务器上的超文本信息。 在分布式、协作式的超媒体信息系统中,HTTP协议扮演着核心角色,它支持了信息的组织、检索和呈现…

ChatGPT01-preivew体验报告:内置思维链和多个llm组合出的COT有啥区别呢?丹田与练气+中学生物理奥赛题测试,名不虚传还是名副其实?

一个月前,o1发布的时候,我写了篇文章介绍 逻辑推理能力堪比博士生,OpenAI发布全新AI模型系列: o1 - 大模型或许进入新阶段,还翻译了官方的介绍 解密OpenAI o1是如何让LLMs获得逻辑推理能力的 - CoT * RL,也…

Ribbon客户端负载均衡策略测试及其改进

文章目录 一、目的概述二、验证步骤1、源码下载2、导入IDE3、运行前修改配置4、策略说明5、修改策略 三、最终结论四、改进措施1. 思路分析2. 核心代码3. 测试页面 一、目的概述 为了验证Ribbon客户端负载均衡策略在负载节点失效的情况下,是否具有故障转移的功能&a…

学习 UE5 的一些前置操作总结

随着 Unity, Godot 这些引擎都玩抽象,主动捅自己一刀后,UE5 的风头不可谓不盛,本着多学一点免得失业的思路方针,咱也研究了一下 UE5 引擎,然后发现想要开始使用 UE5 ,包含了很多前置操作,这里总…

Java项目-基于springboot框架的家具商城系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

使用Yolov10和Ollama增强OCR

1. 训练自定义 Yolov10 数据集 利用物体检测增强 OCR 的第一步是在数据集上训练自定义 YOLO 模型。YOLO(只看一遍)是一种功能强大的实时对象检测模型,它将图像划分为网格,使其能够在一次前向传递中识别多个对象。这种方法非常适合…

AI大模型开发架构设计(14)——基于LangChain大模型的案例架构实战

文章目录 基于LangChain大模型的案例架构实战1 LangChain 顶层架构设计以及关键技术剖析LangChain 是什么?LangChain的主要功能是什么?LangChain 顶层架构设计LangChain 典型使用场景:QA 问答系统LangChain 顶层架构设计之 Model I/OLangChain 顶层架构…

No.17 笔记 | XXE漏洞:XML外部实体注入攻击

1. XXE漏洞概览 XXE(XML External Entity)是一种允许攻击者干扰应用程序对XML输入处理的漏洞。 1.1 XXE漏洞比喻 想象XML解析器是一个听话的机器人,而XXE就是利用这个机器人的"过分听话"来获取不应该获取的信息。 1.2 XXE漏洞危…

基于SSM汽车零部件加工系统的设计

管理员账户功能包括:系统首页,个人中心,员工管理,经理管理,零件材料管理,产品类型管理,产品信息管理,产品出库管理,产品入库管理 员工账号功能包括:系统首页…

spring-cloud-alibaba-nacos-config2023.0.1.*启动打印配置文件内容

**背景:**在开发测试过程中如果可以打印出配置文件的内容,方便确认配置是否准确;那么如何才可以打印出来呢; spring-cloud-alibaba-nacos-config 调整日志级别 logging:level:com.alibaba.cloud.nacos.configdata.NacosConfigD…

Java爬虫:获取商品销量详情API返回值的实战指南

在数字化时代,数据已成为电商运营的核心。商品销量数据不仅反映了市场的需求和趋势,还能为商家提供决策支持。通过Java爬虫技术,我们可以高效地获取这些数据,从而深入分析商品的市场表现。 为何选择Java爬虫获取销量数据 自动化处…