如何解决SceneKit:如何将节点的移动限制在本地的一个轴上,而不是整个世界
使用 SCNTransformConstraint.positionConstraint 在世界空间中防止节点在一个轴(X、Y 或 Z)上的移动被其他力移动非常容易,如下所示:
let zPosition = node.position.z
let strafingConstraint = SCNTransformConstraint.positionConstraint(inWorldspace: true,with: {(_ node: SCNNode,_ position: SCNVector3) -> SCNVector3 in
localPosition = position
localPosition.z = zPosition
return localPosition
})
node.constraints = [strafingConstraint];
然而,这在世界空间中限制了它。如果我只想让节点不再在其局部 Z 轴上移动,而不管其方向如何,那么它只能在其局部 X 和 Y 轴上移动,我该怎么办?有没有办法使用 .convertPosition(:from:) 或 .convertPosition(:to:) 函数来做到这一点?有没有更好的办法?
解决方法
这可能是在不使用 SNCConstraint 的情况下将节点固定到特定轴的另一种方法。
使用 updateAtTime
委托函数在每一帧内调整节点的 z 位置:
func renderer(_ renderer: SCNSceneRenderer,updateAtTime time: TimeInterval) {
node.position.z = 0.0 // or wherever you want to have it
}
(如果你的节点有一个物理实体,你应该只在实体类型 = .kinematc
时改变它的位置)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。