在 SceneKit 中沿弯曲路径动画 SCNNode。
在 Xcode 11 中添加此仓库的 URL,最低版本为 1.3.0
将以下内容添加到您的 Podfile pod 'SCNBezier'
使用此框架,您可以使用以下示例代码沿贝塞尔曲线路径动画一个 Node
let myNode = SCNNode(geometry: SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0))
let bezPositions = [
SCNVector3(-1, 1, 0.01),
SCNVector3(1, 0.5, 0.4),
SCNVector3(1.0, -1, 0.1),
SCNVector3(0.4, -0.5, 0.01)
]
myNode.runAction(SCNAction.moveAlong(points: bezPositions, duration: 3, fps: 12))
动画将使用 duration * fps
个点进行动画;这需要 Double 类型,或其 TypeAlias TimeInterval。这并不意味着它不会平滑,它只是意味着它将使用那么多点来创建曲线,因此在本例中它将使用贝塞尔曲线上的 36 个点。
如果您想收集路径上的 n 个点以用于定位对象等,则可以创建类 SCNBezierPath
,如下所示
let path = SCNBezierPath(points: points)
for point in path.getNPoints(count: 20) {
let newNode = SCNNode(geometry: nodeGeometry)
newNode.position = point
parent.addChildNode(newNode)
}
如果您想获取曲线上某个百分比的点,这里有一个函数可以简化您的操作。
let path = SCNBezierPath(points: points)
let quaterWay = path.posAt(time: 0.25) // gets the point 25% along from start to end
其中 points、nodeGeometry 和 parent 是任意值。