如何旋转 SCNNode 跟随 Line

问题描述

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

解决方法

首先是 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()
                }
        })
    }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...