[SWIFT] Chargez un modèle 3D au format usdz dans SceneKit et animez-le

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

procédure

  1. 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.

  2. Créez un projet de jeu à partir de la création de projet Xcode

  3. Faites glisser et déposez les fichiers usdz dans votre projet

image.png

  1. Chargez le modèle

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.

  1. Contrôlez l'animation En fait, à ce stade, l'animation contenue dans usdz commence à jouer et le batteur Toy commence à jouer du tambour.

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`. image.png

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()
}

terminer

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.

toy_drummer.gif

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

Chargez un modèle 3D au format usdz dans SceneKit et animez-le
Ecrire une classe en Kotlin et l'appeler en Java
21 Lire et exécuter le script à partir du fichier
(Ruby on Rails6) Créer une base de données et l'afficher dans une vue
J'ai écrit un programme de recherche d'itinéraire dans TDD et j'ai essayé de le refactoriser