我正在使用 SceneKit 并且有一个具有多个 SCNNodes 的应用程序,当用户点击一个时,它将跟随他们的手指(使用 UILongPressGestureRecognizer)。在状态开始和改变时,我使用以下代码行来改变节点的位置:
_currentlyMoving?.position = SCNVector3Make(worldPoint.x, worldPoint.y, worldPoint.z)
在这一行中,_currentlyMoving
是 SCNNode,而 worldPoint 是我手指的位置。
这是将节点移动到正确的位置;但是,它似乎也将节点的旋转更改为(0,0,0)(节点始终处于其起始旋转状态。)
有什么方法可以改变 SCNNode 的位置而不影响旋转?
另外,我尝试了以下方法,但也没有用(同样的事情发生了):
_currentlyMoving?.transform.m41 = worldPoint.x
_currentlyMoving?.transform.m42 = worldPoint.y
_currentlyMoving?.transform.m43 = worldPoint.z
我对节点所做的唯一另一件事是使用以下三行来阻止它在拾取时移动:
_currentlyMoving?.physicsBody?.velocity = SCNVector3Make(0.0, 0.0, 0.0)
_currentlyMoving?.physicsBody?.velocityFactor = SCNVector3Make(0.0, 0.0, 0.0)
_currentlyMoving?.physicsBody?.angularVelocity = SCNVector4Make(0.0, 0.0, 0.0, 1.0)