如何使用SCNTransformConstraint来限制节点的Z值?

时间:2015-04-25 00:44:34

标签: ios swift scenekit

我似乎无法弄清楚如何使用SCNTransformConstraint约束节点的Z值。这是我到目前为止所拥有的。

        let constraint = SCNTransformConstraint(inWorldSpace: true, withBlock:{
            node, matrix in

            var newMatrix = matrix
            let currentNode = node as SCNNode
            if (currentNode.presentationNode().position.z > 0.0) {
                newMatrix.m43 = 0.0
            }

            return newMatrix
        })

    ship.constraints = [constraint]

使用上述约束时,ship在我向其physicsBody施加力时不会移动。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

呀。这个也让我感到难过。

问题在于矩阵。根据有关SCNMatrix4(矩阵)参数的Developer documentation

  

如果节点受到正在进行的动画的影响,则此值反映动画期间节点的当前可见状态(而不是动画完成时可见的目标状态)。

而不是:

var newMatrix = matrix

你真的想要:

var newMatrix = node.transform

似乎是将要应用于节点的当前转换。

我知道这是一个老问题,但这接近SCNTransformConstraint搜索结果的顶部。嘿,迟到总比没有好,对吗?

答案 1 :(得分:1)

这对我来说是将SCNCameraController约束到网格边界的工作:

b = [('H', 1), ('e', 1), ('l', 2), ('o', 1), ('!', 1)]
''.join([c[0] * c[1] for c in b])
Hello!