Ich werde Ihnen zeigen, wie Sie ein 3D-Modell im usdz-Format in SceneKit laden und animieren.
Ich habe auf diesen Artikel verwiesen, aber jetzt muss ich "ModelIO" nicht mehr verwenden, also schreibe ich ihn erneut. Laden Sie das 3D-Modell im USDZ-Format mit Model I / O und verwenden Sie es mit SceneKit
Bereiten Sie ein 3D-Modell im usdz-Format vor Dieses Mal habe ich den Spielzeug-Schlagzeuger von [Apples offizieller Website] heruntergeladen (https://developer.apple.com/jp/augmented-reality/quick-look/).
Erstellen Sie ein Spielprojekt aus der Xcode-Projekterstellung
Ziehen Sie usdz-Dateien per Drag & Drop in Ihr Projekt
Ich werde es in viewDidLoad von GameViewController schreiben.
GameViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
guard let url = Bundle.main.url(forResource: "toy_drummer", withExtension: "usdz") else { fatalError() }
let scene = try! SCNScene(url: url, options: [.checkConsistency: true])
Wenn Sie die URL direkt an SCNScene übergeben, können Sie die usdz-Datei so wie sie ist laden.
Lassen Sie uns nur die Bewegung des linken Arms stoppen.
Wenn Sie die usdz-Datei öffnen, sehen Sie, dass der linke Arm den Namen "arm_keft" trägt und eine Animation mit dem Namen "transform" enthält.
Nehmen Sie es mit einem Code heraus.
GameViewController.swift
let drummer = scene.rootNode.childNode(withName: "toy_drummer", recursively: true)!
let armLeft = drummer.childNode(withName: "arm_left", recursively: true)
let player = armLeft?.animationPlayer(forKey: "transform")
player?.stop()
Ich erhalte den linken Armknoten vom toy_drummer-Knoten. Und ich bekomme die "Transform" -Animation und stoppe sie.
Früher hatten wir animationPlayer in einer lokalen Variablen, jetzt möchten wir ihn in einer Instanzvariablen speichern, damit er in Ereignishandlern verwendet werden kann.
GameViewController.swift
class GameViewController: UIViewController {
var player: SCNAnimationPlayer?
Starten Sie im Event-Handler die Animation der Bewegung des linken Arms. Es ist notwendig, "addGestureRecognizer" aufzurufen, um den Ereignishandler zu registrieren, aber der Code, der beim Erstellen des Spielprojekts automatisch generiert wird, wird umgeleitet.
GameViewController.swift
@objc
func handleTap(_ gestureRecognize: UIGestureRecognizer) {
player?.animation.repeatCount = 1
player?.play()
}
Der linke Arm wird beim Tippen animiert. Es gibt auch andere Animationen, aber dieses Mal können Sie sehen, dass sie sich in einer Schleife befinden, weil sie nicht gesteuert werden.
Wir senden Informationen zur Entwicklung von iOS-Anwendungen. Bitte folgen Sie mir, da es auch auf Twitter gepostet wird. https://twitter.com/jugemjugemjugem
Recommended Posts