P. *_*sin 4 swiftui realitykit visionos
我认为 RealityView 应该能够做更多奇特的事情,但我仍然想弄清楚它们之间的确切区别。目前,它们彼此太相似了,例如它们都需要一个实体名称来初始化。我想知道什么时候 Model3D 就足够了,什么时候必须使用 RealityView?
Apple 工程师的标准做法是为视图提供多个初始化程序。VisionOSRealityView
也不例外。让我们看一下 RealityView 的init(make:update:attachments:)
具有三个闭包的初始化程序,您可以在其中:
make
关闭)update
关闭)attachments
闭包)还有带有占位符init(make:update:placeholder:)
的初始化程序。
使用 RealityView 在 RealityKit 应用程序中异步加载(这是一个可选操作)并显示丰富的 3D 内容。RealityView 将符合 RealityViewContentProtocol 的结构传递给make
和update
闭包,您可以使用它在场景中添加和删除 RealityKit 的实体。实体必须是.usdz
Reality Composer Pro 中的 3D 图元、模型或场景。
RealityView { content, attachments in\n // code\n} update: { content, attachments in\n // code \n} attachments: {\n // code \n}\n
Run Code Online (Sandbox Code Playgroud)\n就像在 ARSCNView(它是 AR 和 VR 的 SceneKit 共生体)中一样,您不必使用锚点,但是,使用锚点使您有机会实现强大的 AR 场景 \xe2\x80\x93,例如image tracking
,plane tracking
,hand tracking
, ETC。
让我们看看 RealityView 在代码中的样子以及控制台中将打印什么基础对象:
\nimport SwiftUI\nimport RealityKit\n\nstruct ContentView: View {\n var body: some View {\n RealityView { content in\n if let model = try? await Entity.load(named: "car") {\n model.scale /= 10\n \n let anchor = AnchorEntity()\n anchor.addChild(model)\n content.add(anchor)\n \n print(content)\n }\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n换句话说,RealityView
它是 VisionOS SwiftUI 应用程序的 RealityKit 视图,您可以在其中访问场景的集合点。并且不要忘记锚点是RealityView
层次结构的重要组成部分,而 Model3D 中的情况并非如此。
SwiftUI 的 Model3D 视图比 RealityView 更简单,用于从指定的 URL(.usdz
或.reality
多个模型)或应用程序的包异步加载和显示模型。在模型加载之前,SwiftUI 会显示一个占位符。生成的模型包含在ResolvedModel3D
视图中。使用 Model3D 视图时,您无法像在 RealityView 中那样分解 3D 场景。
Model3D(url: url) { phase in\n if let model = phase.model {\n // code\n } else if phase.error != nil {\n // error description \n } else {\n // placeholder\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n就像 RealityView 一样,Model3D 视图也有几个初始值设定项。
\n让我们看看init(named:bundle:content:placeholder:)
带有占位符@ViewBuilder 的初始化程序在代码中的外观以及控制台中将打印什么基础对象:
import SwiftUI\nimport RealityKit\n\nstruct ContentView: View {\n var body: some View {\n Model3D(named: "car") { model in\n model.resizable()\n\n let _ = print(model)\n } placeholder: {\n ProgressView()\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n换句话说,Model3D
是 SwiftUI 的 3D 视图包含 RealityKit 的场景。
归档时间: |
|
查看次数: |
1967 次 |
最近记录: |