【问题标题】:Animate SCNBox height by keeping base in the same y通过将基础保持在相同的 y 来设置 SCNBox 高度的动画
【发布时间】:2014-11-24 02:30:52
【问题描述】:

我有一个 SCNBox 对象通过 SCNNode 添加到 SCNScene...

let box:SCNBox = SCNBox(width: 4, height: 4, length: 4, chamferRadius: 0.1)
box.firstMaterial?.diffuse.contents = UIColor.greenColor()
let boxNode:SCNNode = SCNNode(geometry: box)
boxNode.position = SCNVector3(x: 2, y: 2, z: 2)
scene.rootNode.addChildNode(boxNode)

我的问题是如何设置高度(假设为 40),同时让盒子也不会向下增长?

我想我需要将轴心点更改为位于框的底部?

如果这是一个解决方案,我不知道该怎么做。

我怎样才能正确地做到这一点?

【问题讨论】:

    标签: swift scenekit


    【解决方案1】:

    是的,pivot 是您需要更改的,这是正确的。枢轴是一种变换——这意味着它可以包含缩放和旋转以设置节点的“基本”方向——但你只需要一个平移。要将框锚定在底部,请将枢轴平移框高度的一半:

    boxNode.pivot = SCNMatrix4MakeTranslation(0, -(box.height/2), 0)
    

    但是,如果您更改高度,这不足以使其保持锚定 - 枢轴将保持在 old 高度的一半,因此您的框仍将在两个方向上增长。因此,您需要在制作动画时更改轴心和高度:

    SCNTransaction.begin()
    SCNTransaction.setAnimationDuration(5)
    box.height = 20
    boxNode.pivot = SCNMatrix4MakeTranslation(0, -(box.height/2), 0) // new height
    SCNTransaction.commit()
    

    由于您同时为 box.heightboxNode.pivot 设置动画,因此它将在整个动画过程中保持锚定在底部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多