【问题标题】:How to Rotate SCNNode to follow Line如何旋转 SCNNode 跟随线
【发布时间】:2021-07-09 01:32:13
【问题描述】:

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

【问题讨论】:

  • 您可能对来自this answerupdatePositionAndOrientationOf 函数感兴趣
  • 如果我错了请纠正我,但我的理解是这个函数将用于将对象移动到我的移动节点前面的位置,但我需要我的移动节点来改变它的方向当它移动到一个特定点时
  • 啊,是的。 Nvm,其实不是很相关
  • 你可能会用到一些 SCNConstraints

标签: swift scenekit euler-angles rotational-matrices


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 2017-12-26
    • 2016-03-18
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    相关资源
    最近更新 更多