2017-04-21 6 views
1

J'ai essayé d'utiliser un fichier dae dans scenekit pour mon modèle ainsi que mes animations. Lorsque j'essaie de mettre à l'échelle le modèle, il est correctement mis à l'échelle. Une fois l'animation lancée, elle revient à l'échelle d'origine. Voici ce que je suis en train de faire en ce moment:L'échelle SCNNode change lorsque l'animation est lue à l'aide d'un fichier dae

let playerNode = gameScene.rootNode.childNode(withName: "Player", recursively: true) 

let animation = CAAnimation.animationWithSceneNamed(name: "GameAssets.scnassets/Objects/WalkAnimation.dae") 

playerNode.addAnimation(animation, forKey: "WalkAnimation") 

Répondre

1

Comme nous n'avons pas accès à votre fichier Collada, prenons l'exemple de walk.dae du SceneKitAnimations sample code.

Dans ce fichier, vous trouverez les éléments suivants:

<library_animations> 
    <animation id="WalkID"> 
     ... 
     <source id="node-Bip01_matrix-output"> 
     ... 
     <technique_common> 
      <accessor source="#node-Bip01_matrix-output-array" count="29" stride="16"> 
      <param name="TRANSFORM" type="float4x4"/> 
      </accessor> 
     </technique_common> 

Vous pouvez voir que le fichier d'animation n'a pas d'animations distinctes pour les positions et les rotations, mais il a une seule animation qui vise l'ensemble des transformations (cf TRANSFORM et float4x4).

Cela signifie que l'évaluation de l'animation écrase le scale du nœud. Vous devez avoir différentes animations uniquement pour les propriétés position et rotation au lieu d'une animation pour la propriété transform si vous ne souhaitez pas que le scale soit remplacé.