我有以下可以正确加载的 Reality Composer 项目。正如您所看到的,当动画完成时,它应该使用关键字“attackComplete”进行通知。
我如何收到此通知?
import RealityKit
import ARKit
class ViewController: UIViewController, ARSessionDelegate {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
let boxAnchor = try! Experience.loadOrcAttack()
arView.session.delegate = self
arView.scene.anchors.append(boxAnchor)
print("done")
}
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
print(anchors)
}
}
最佳答案
通过 Reality Composer 的通知,您可以实现两种场景:
Action 监听器
这是您的案例,使用它很容易实现
public var onAction: ((RealityKit.Entity?) -> Swift.Void)?
.
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
let scene = try! Experience.loadScene()
override func viewDidLoad() {
super.viewDidLoad()
arView.scene.anchors.append(scene)
scene.actions.attackCompleted.onAction = notificationID // listener
}
fileprivate func notificationID(_ entity: Entity?) {
print(scene.actions.attackCompleted.identifier)
}
}
这里还有一个 example如何使用 .onAction
完成处理程序。
触发操作
当您需要通知 Reality Composer 的场景播放 Action 时,请使用以下场景:
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
let scene = try! Experience.loadScene()
override func viewDidLoad() {
super.viewDidLoad()
arView.scene.anchors.append(scene)
}
@IBAction func press(_ sender: UIButton) {
scene.notifications.spinner.post() // trigger for action
}
}
或使用[NAME.NotificationTrigger]
的下标:
@IBAction func press(_ sender: NSButton) {
scene.notifications.allNotifications[0].post()
}
这里还有一个示例 .post()可以使用实例方法。
P。 S.
如果您需要更多信息,请阅读 this post .
关于swift - 接收有关 Reality Composer 动画结束的 Xcode 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71115018/