Je vais vous montrer comment charger un modèle 3D au format usdz dans SceneKit et l'animer.
J'ai fait référence à cet article, mais maintenant je n'ai plus besoin d'utiliser ModelIO
, je vais donc l'écrire à nouveau.
Chargez le modèle 3D au format USDZ avec Model I / O et utilisez-le avec SceneKit
Préparez un modèle 3D au format usdz Cette fois, j'ai téléchargé le batteur de jouet depuis le site officiel d'Apple.
Créez un projet de jeu à partir de la création de projet Xcode
Faites glisser et déposez les fichiers usdz dans votre projet
Je vais l'écrire dans viewDidLoad de GameViewController.
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])
Si vous transmettez directement l'URL à SCNScene, vous pouvez charger le fichier usdz tel quel.
Arrêtons seulement le mouvement du bras gauche.
Si vous ouvrez le fichier usdz, vous pouvez voir que le bras gauche est nommé ʻarm_keft et a une animation nommée
transform`.
Sortez-le avec un code.
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()
J'obtiens le nœud du bras gauche du nœud toy_drummer.
Et il obtient l'animation transform
et l'arrête.
6.Faites bouger le bras gauche lorsque vous appuyez dessus
Auparavant, nous avions animationPlayer dans une variable locale, mais maintenant nous voulons l'enregistrer dans une variable d'instance afin qu'il puisse être utilisé dans les gestionnaires d'événements.
GameViewController.swift
class GameViewController: UIViewController {
var player: SCNAnimationPlayer?
Dans le gestionnaire d'événements, lancez l'animation du mouvement du bras gauche. Il est nécessaire d'appeler ʻaddGestureRecognizer` pour enregistrer le gestionnaire d'événements, mais le code généré automatiquement lors de la création du projet Game est détourné.
GameViewController.swift
@objc
func handleTap(_ gestureRecognize: UIGestureRecognizer) {
player?.animation.repeatCount = 1
player?.play()
}
Le bras gauche s'anime lorsqu'il est touché. Il existe également d'autres animations, mais cette fois, vous pouvez voir qu'elles sont en boucle car elles ne sont pas contrôlées.
Nous envoyons des informations sur le développement d'applications iOS. Veuillez me suivre car il est également publié sur Twitter. https://twitter.com/jugemjugemjugem
Recommended Posts