我正在为 VisionOS 2 Beta 使用 Reality Composer Pro 2.0 和 Xcode 16 beta。
通过在点击 swiftui 按钮时调用,我可以查看并触发 Xcode 中 RealityView 中的 RCP 动画组件动画,一切都playAnimation
很好。scene.availableAnimations[0]
我也希望能够通过点击 swiftui 按钮来触发新的时间线操作动画,但我不确定在代码中访问时间线操作以触发它们的最佳方法。
我看到我可以从 Xcode 发送一个通知来触发时间线操作(如屏幕截图所示),但我不确定如何从 SwiftUI 发送通知到 RCP 来触发这个“SpinAndMove”时间线动画。
如果有人可以帮助从 SwiftUI 向 RCP 发送通知,或者有更好的“最佳实践”方法从 RCP 外部触发时间线操作,我们将不胜感激!
最佳答案
2
Apple 开发者论坛已回答了这个问题:
该帖子描述了如何使用 VisionOS 进行通知,但我能够使用以下命令使其在 macOS 目标上运行:
if let scene = appModel.contentEntity?.scene {
NotificationCenter.default.post(
name: Notification.Name("RealityKit.NotificationTrigger"),
object: nil,
userInfo: [
"RealityKit.NotificationTrigger.Scene": scene,
"RealityKit.NotificationTrigger.Identifier": "insideFlip"
])
}
insideFlip
Reality Composer Pro 中通知名称在哪里定义,appModel.contentEntity?.scene
是在里面定义的RealityView
。
if let immersiveContentEntity =
try? await Entity(named: "Immersive", in: realityKitContentBundle) {
appModel.contentEntity = immersiveContentEntity
}
2
-
1做得好,+赞。
– -
1太好了,非常感谢 Caroline!
–
|
首先,我想说,所有的荣誉都属于@Caroline。我只想补充一下这篇文章,并发布 RCP 2.0 场景设置和完整版代码。这里有一个Hide
按钮,它会向 RCP 2.0 场景发送通知,以激活所选时间线的行为。
struct ContentView : View {
@Environment(\.realityKitScene) var scene
let rkcb = realityKitContentBundle
let rknt = "RealityKit.NotificationTrigger"
fileprivate func notify(_ scene: RealityKit.Scene) {
let notification = Notification(name: .init(rknt),
userInfo: ["\(rknt).Scene" : scene,
"\(rknt).Identifier" : "notifier"])
NotificationCenter.default.post(notification)
}
var body: some View {
RealityView { rvc in
if let model = try? await Entity(named: "Scene", in: rkcb) {
rvc.add(model)
}
}
.gesture(
SpatialTapGesture()
.targetedToAnyEntity()
.onEnded {
if $0.entity.applyTapForBehaviors() {
print("Tapped")
}
}
)
Button("<< Hide >>") {
if let scene { notify(scene) } // A miracle happens here
}
.font(.system(size: 125))
.padding3D(.front)
}
}
2
-
1非常感谢所添加的背景信息,谢谢你安迪!
– -
2Jack,不用客气!当然,如果没有来自库比蒂诺的 Vision Pro 工程师帮助我们,如果没有 Caroline 帮助我们👍🏻,那么猜测参数中需要一组什么样的字典将非常困难
userInfo
。RealityComposer 1.5 之前拥有的通知 API 非常。
–
|
|