首页 > 解决方案 > 如何旋转 SCNNode 跟随线

问题描述

我有一个 SCNNode,我想遵循由 SCNVector3s 表示的点组成的路径。但是,不是简单地从一个点移动到另一个点,我希望它旋转以朝向它移动的每个点的方向。我知道设置 SCNLookAtConstraint 可以对此有所帮助,但我相信这只会控制负 z 轴所面对的方向,但我希望能够控制 y 轴以确保其负 y 轴始终面向朝着轨道。我希望我足够清楚,但请随时要求澄清。谢谢!

标签: swiftscenekiteuler-anglesrotational-matrices

解决方案


首先 moveTo() - 听起来你有正确的想法,只需在完成处理程序中重置你的下一步。我假设您手动执行此操作,因此在下一步开始时设置 lookAt 约束并将其指向目标。我“认为”这会做你想做的事,但取决于几件事,比如它移动的速度,你是飞过 targetNode 还是在它上方,某些情况可能会导致它“反弹”。如果我正确理解了您的 y 轴问题 - lookAt 将面向节点并锁定它。如果您在平坦的表面上,我认为这不会有问题。

func moveTo()
    {
        let vPanelName = moves[moveCount]
        let vLaneNode = grid.gridPanels[vPanelName]!.laneNodes[lane]
        let vAction = SCNAction.move(to: vLaneNode.presentation.position, duration: TimeInterval(data.getAttackSpeed(vGameType: gameType)))
        
        node.runAction(vAction, completionHandler:
            {
                self.moveCount += 1
                if(self.moveCount >= self.moves.count - 1)
                {
                    self.killMe(vRealKill: false)
                    return
                }
                else
                {
                    self.moveTo()
                }
        })
    }

推荐阅读