我似乎无法弄清楚如何使用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
施加力时不会移动。任何帮助将不胜感激。
答案 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!