Swift 3、SceneKit:在我的游戏中,屏幕中央有一个 SCNSphere 节点。球体通过重力落到 SCNBox 节点上,一旦与盒子碰撞,就会对其应用 SCNVector3(0,6,0) 的速度。
一个新的盒子被创建并向前(z+)移动到我的相机和球体。球体上升、达到峰值,然后(通过重力)向新盒子落回,当它与新盒子碰撞时,将对其应用 SCNVector(0,6,0) 的速度。这个过程不断重复。基本上是一个在新接近的盒子上反复弹跳的球体。
然而,不是只有一个盒子,而是三个连续的盒子。所有盒子都从球体节点的前面开始,并在创建时朝球体节点移动,盒子排成一排,一个位于球体的左侧,一个位于球体的正前方(中间),第三个位于球体的正前方(中间)。球体的右侧。
我希望能够在屏幕上拖动手指并移动球体,以便它可以落在左侧和右侧的方框上。当我拖动时,我根本不希望改变 y 速度或 y 位置。我只希望球体节点的 x 位置能够反映我的手指相对于屏幕的真实世界 x 位置。我也不希望球体节点仅根据触摸来更改位置.
例如,如果球体的位置位于 SCNVector3(2,0,0),并且用户在 SCNVector3(-2,0,0) 附近点击,我不希望球体“传送”到用户点击的位置。我希望用户将球体从最后的位置拖动。
func handlePan(recognizer: UIPanGestureRecognizer) {
let sceneView = self.view as! SCNView
sceneView.delegate = self
sceneView.scene = scene
let trans:SCNVector3 = sceneView.unprojectPoint(SCNVector3Zero)
let pos:SCNVector3 = player.presentation.position
let newPos = (trans.x) + (pos.x)
player.position.x = newPos
}