我正在尝试创建一个游戏,其中GameScene由GameViewController中的AR Face Tracking控制。游戏结束时,有一个选项可以转到主菜单(显示MainMenuScene的按钮)。但是,每当我出现MainMenuScene并切换回GameScene时,就不再检测到人脸跟踪。我该如何解决这个问题?
这是我GameViewController中的代码如下:
import UIKit
import SpriteKit
import GameplayKit
import ARKit
import Vision
import AVFoundation
class GameViewController: UIViewController, ARSessionDelegate, AVCaptureVideoDataOutputSampleBufferDelegate {
var sequenceHandler = VNSequenceRequestHandler()
var mainMenu: MainMenu! = MainMenu(size: CGSize(width: 1536, height: 2048))
var gameScene: GameScene! = GameScene(size: CGSize(width: 1536, height: 2048))
var session: ARSession!
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
gameScene.scaleMode = .aspectFill
view.presentScene(gameScene)
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
session = ARSession()
session.delegate = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard ARFaceTrackingConfiguration.isSupported else {print("bruhhhh"); return}
let configuration = ARFaceTrackingConfiguration()
session.run(configuration, options: [.resetTracking, .removeExistingAnchors])
}
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]){
if let faceAnchor = anchors.first as? ARFaceAnchor {
update(withFaceAnchor: faceAnchor)
if faceAnchor.isTracked == true {
gameScene.deleteErrorMessage()
} else {
gameScene.errorMessage()
}
}
}
func update(withFaceAnchor faceAnchor: ARFaceAnchor){
let blendShapes: [ARFaceAnchor.BlendShapeLocation:Any] = faceAnchor.blendShapes
guard let mouthPucker = blendShapes[.mouthPucker] as? Float else {return}
guard let mouthSmileLeft = blendShapes[.mouthSmileLeft] as? Float else {return}