VisionPro开发 - 从Reality Composer 1.5 迁移到 Reality Composer Pro

最近想把一个老的iOS AR项目迁移到VisionPro上面,同时兼顾iOS和visionOS两个版本,但是遇到了一些问题,这里简单总结记录一下:

iOS目前的情况

目前加载3D模型的方式是,在项目目录中有一个Experience.rcproject的文件,是老的AR项目创建时,自动创建的。可以用老的Reality Composer打开。

然后通过以下方法加载Anchor Entity和获取模型的Entity

swift 复制代码
guard let anchor = try? Experience.loadStick(),
let stickEntity = anchor.findEntity(named: "Stick") else {
    return arView
}

在手机的AR场景下,展示如下:

具体AnchorEntity相关的内容可以参考官方文档:

developer.apple.com/documentati...

developer.apple.com/documentati...

但是,目前遇到一个问题就是这个rcproject文件是通过老的Reality Composer来创建的,用新的Reality Composer Pro根本打不开。即使我现在项目依然可以正常运行,但是如果我想编辑老的模型和场景,就没有办法了。

以下是网上找到相关问题的回答:

最新版本的Xcode(v.15)附带了一个名为Reality Composer Pro 1.0的新原型设计工具,它与之前包含在Xcode 14中的Reality Composer 1.5开发者应用不可互换。两个版本的Xcode都能够与老旧的Reality Composer 1.5应用协同工作。然而,要能够自动将Experience.rcproject文件加载到RealityKit项目中,请使用Xcode 14。在Xcode 15中使用非pro版Reality Composer的场景时,必须手动导入.rcproject文件。

原文地址:

stackoverflow.com/questions/7...

因为Mac版的Reality Composer是随着Xcode一起的,所以Xcode 15.2之后就没办法获取老的Reality Composer,只能使用Reality Composer Pro了

所以只能硬着头皮,探索如何使用新的Reality Composer Pro在iOS和visionOS上面进行3D内容的制作。

开始使用Reality Composer Pro

1. 创建模型

添加一个圆柱体

调整圆柱体的半径

修改颜色

修改Entity名称为Stick

2. 导入模型

2.1. 导入realitycomposerpro项目(只支持visionOS)

项目中的文件

加载方式:

首先在,Targets -> Frameworks, Labraries...中添加该RealityComposerPro项目

这里有个小知识点,就是,如果app同时面向visionOS和iOS多平台,这里一定要只勾选visionOS。否则就会报错:Building for 'iphones', but realitytool only supports [xros, xrsimulator]

解决方案也是碰巧刚刚网上有遇到的:

stackoverflow.com/questions/7...

然后就可以在项目中引用该对象

swift 复制代码
import Milfol

....

var stickEntity = Entity()
do { // Load assets.
    stickEntity = try await Entity(
        named: "Stick",
        in: milfolBundle
    )

} catch {
    fatalError("Failed to load a model asset.")
}

最后看一下模拟器的效果:

2.2. 导出成usdz格式,再导入到xcode

导出Entity

导出结果

加载方式:先通过文件名获取到AnchorEntity,因为后续ARView中要使用到,再通过AnchorEntity找到模型的Entity。

swift 复制代码
guard let anchor = try? Entity.loadAnchor(named: "Milfol") else {
    print("load anchor failed")
    return arView
}

guard let stickEntity = anchor.findEntity(named: "Stick") else {
    print("load entity failed")
    return arView
}

总结

感觉这次visionOS针对AR的升级兼容性还是比较差的,老的AR应用如果想移植到visionOS,最好的方案就是重写。如果是新的AR App,可能要优先考虑visionOS,然后再兼容iOS。以下是官方文档的部分引用

要创建一个同时在iOS和visionOS上运行的单一应用,请使用两个平台都可用的技术。尽管在iOS中,ARKit允许你使用多种不同的技术创建你的界面,但在visionOS中,首选的技术是SwiftUI和RealityKit。如果你目前没有使用RealityKit来处理3D内容,请在开始添加visionOS支持之前考虑切换到它。如果你保留在iOS应用中使用旧技术的代码,当迁移到visionOS时,你可能需要使用RealityKit重新创建那些代码。

原文地址:

developer.apple.com/documentati...

总之,在visionOS体系下,目前ARKit的使用还是很受限的,官方的说法是主要考虑到隐私原因。没关系,我还是先把RealityKit再好好学一学吧,感觉这个是未来的使用重点。

相关推荐
问道飞鱼4 分钟前
【前端知识】React生态你了解多少?
前端·react.js·前端框架·生态
Pu_Nine_95 分钟前
前端SSE(Server-Sent Events)实现详解:从原理到前端AI对话应用
前端·langchain·sse·ai对话
optimistic_chen15 分钟前
【Vue3入门】Pinia 状态管理 和 ElementPlus组件库
前端·javascript·vue.js·elementui·pinia·组件
酉鬼女又兒18 分钟前
零基础入门前端JavaScript 核心语法:var/let/const、箭头函数与 setTimeout 循环陷阱全解析(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·蓝桥杯
Bling_Bling_121 分钟前
【无标题】
前端·网络协议
We་ct22 分钟前
React Diff & Key 核心解析
开发语言·前端·javascript·react.js·前端框架·reactjs·diff
哥本哈士奇23 分钟前
Vue 3 快速入门:从零搭建前后端 CRUD 应用
前端·javascript·vue.js
biubiubiu070624 分钟前
Agent 是如何拥有“手脚”的(ReAct 运行流程)
开发语言·前端·javascript
摸鱼的春哥28 分钟前
Agent教程21:知识图谱🕸,让AI🤖学会联想
前端·javascript·后端
SuperEugene28 分钟前
Vue3 组件拆分实战规范:页面 / 业务 / 基础组件边界清晰化,高内聚低耦合落地指南|Vue 组件与模板规范篇
前端·javascript·vue.js·前端框架