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 的实体。实体必须是.usdzReality Composer Pro 中的 3D 图元、模型或场景。
RealityView { content, attachments in\n // code\n} update: { content, attachments in\n // code \n} attachments: {\n // code \n}\nRun 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}\nRun 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}\nRun 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}\nRun Code Online (Sandbox Code Playgroud)\n换句话说,Model3D是 SwiftUI 的 3D 视图包含 RealityKit 的场景。
| 归档时间: |
|
| 查看次数: |
1967 次 |
| 最近记录: |