使用 dae 文件播放动画时 SCNNode 比例发生变化

Posted

技术标签:

【中文标题】使用 dae 文件播放动画时 SCNNode 比例发生变化【英文标题】:SCNNode scale changes when animation plays using a dae file 【发布时间】:2017-09-18 16:15:44 【问题描述】:

尝试在我的模型和动画中使用 scenekit 中的 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")

【问题讨论】:

【参考方案1】:

由于我们无权访问您的 Collada 文件,我们以SceneKitAnimations sample code 中的walk.dae 为例。

在该文件中,您将找到以下内容:

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

您可以看到动画文件没有针对位置和旋转的单独动画,而是有一个针对整个变换的动画(参见 TRANSFORMfloat4x4)。

这意味着评估动画将覆盖节点的scale。如果您不希望 scale 被覆盖,则必须为 positionrotation 属性设置不同的动画,而不是为 transform 属性设置动画。

【讨论】:

以上是关于使用 dae 文件播放动画时 SCNNode 比例发生变化的主要内容,如果未能解决你的问题,请参考以下文章

将 collada (dae) 文件加载到 SCNNode (Swift - SceneKit)

Swift 3 将 .dae 文件加载到 SCNNode

从 Collada (.dae) 文件(在 Maya 中创建)导入的 SceneKit 键控混合形状动画未播放

如何将 .dae 文件加载到 iOS SceneKit 中的 SCNNode 中?

SceneKit:使用dae动画更新SCNGeometry

SceneKit:如何控制导入资产的大小,一个 DAE 文件创建巨大的 SCNNode 而另一个是“正常”