swift Reality Composer动画结束时接收Xcode通知

ryevplcw  于 2023-02-03  发布在  Swift
关注(0)|答案(1)|浏览(126)

我有下面的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)
    }
}
ki1q1bka

ki1q1bka1#

使用Reality Composer的通知,您可以实现两种方案:

操作监听器

这就是您的情况,它很容易使用
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)
    }
}

下面是如何使用.onAction***完成处理程序***的另一个示例。

触发行动

当需要通知Reality Composer的场景播放动作时,请使用以下方案:

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()***示例方法***的例子。

附言

如果需要更多信息,请阅读this post

相关问题