使用 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>
您可以看到动画文件没有针对位置和旋转的单独动画,而是有一个针对整个变换的动画(参见 TRANSFORM
和 float4x4
)。
这意味着评估动画将覆盖节点的scale
。如果您不希望 scale
被覆盖,则必须为 position
和 rotation
属性设置不同的动画,而不是为 transform
属性设置动画。
【讨论】:
以上是关于使用 dae 文件播放动画时 SCNNode 比例发生变化的主要内容,如果未能解决你的问题,请参考以下文章
将 collada (dae) 文件加载到 SCNNode (Swift - SceneKit)
从 Collada (.dae) 文件(在 Maya 中创建)导入的 SceneKit 键控混合形状动画未播放