在 SceneKit 中,是不是可以将除对象当前位置之外的导入动画作为原点?

Posted

技术标签:

【中文标题】在 SceneKit 中,是不是可以将除对象当前位置之外的导入动画作为原点?【英文标题】:In SceneKit, is it possible to make imported animation excepting object current position as origin?在 SceneKit 中,是否可以将除对象当前位置之外的导入动画作为原点? 【发布时间】:2020-06-28 09:26:17 【问题描述】:

我们将 Blender 中的动画导入 SceneKit。 动画包括在 xy 平面上的非常简单的移动,因为我们现在只是在测试它。 我们用以下代码加载它;

    let importedDae = SCNScene(named: "animated.scn")!
    let node = importedDae.rootNode.childNode(
    withName: "Cube", recursively: true)!.clone()
    self.headAnimationPlayer = headNode.animationPlayer(forKey: "Cube_CubeAction_transform")!
    let animation = headAnimationPlayer.animation

然后我们将它添加到我们的对象中

    ourObject.addAnimation(self.anime, forKey: "Cube_CubeAction_transform")

正如预期的那样,动画立即开始。 但是动画移动对象出现了问题 到位置 (0,0,0) 然后制作动画。

我们在 Blender 中围绕位置 (0,0,0) 创建了动画,这是合乎逻辑的。 但我们的对象是动态的,添加动画后可以在任何地方。

我们希望动画使用我们对象的当前位置作为原点并制作动画 周围。这可能吗?

【问题讨论】:

如果我们在对象上使用两个节点,并且如果我们在第二个节点添加几何图形,则效果很好。我们使用第一个来移动,第二个用于动画,但这会使事情变得复杂。 【参考方案1】:

正如您在评论中所说,使用中间节点将对象放置在场景中是解决此问题的一种方法。

您还可以查看CAPropertyAnimationadditive 属性(作为CAKeyframeAnimation 的超类),但要​​使用它,您可能必须分解动画。

【讨论】:

以上是关于在 SceneKit 中,是不是可以将除对象当前位置之外的导入动画作为原点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在代码中创建 SceneKit SCNSkinner 对象?

将除当前用户的用户名之外的所有用户名添加到数组

SceneKit对象在其边界框处而不是沿着网格物体碰撞

SceneKit DAE 动画未出现在属性中

如何从3D对象中剪切掉一部分?

如何使用 Xcode 10 在 SceneKit 编辑器中旋转对象