【发布时间】:2018-02-06 23:18:20
【问题描述】:
我正在尝试使用 ARKit 移动实现弹跳球。我希望来自屏幕一端的球弹跳并移出屏幕。
任何人都可以推荐最佳方法或指向示例代码来实现这一点吗?
我可以使用 UIBezierPath 创建路径并沿路径移动 SCNNode。如果是,我该如何沿着路径移动节点。
【问题讨论】:
标签: ios swift augmented-reality arkit
我正在尝试使用 ARKit 移动实现弹跳球。我希望来自屏幕一端的球弹跳并移出屏幕。
任何人都可以推荐最佳方法或指向示例代码来实现这一点吗?
我可以使用 UIBezierPath 创建路径并沿路径移动 SCNNode。如果是,我该如何沿着路径移动节点。
【问题讨论】:
标签: ios swift augmented-reality arkit
创建一个场景和一个球节点。使用球节点的力方向并使用物理为球节点设置动画。这只是一个例子。
// Create a new scene
guard let scene = SCNScene(named: "BouncingBalls.scn", inDirectory: "art.scnassets") else { return }
sceneView.scene = scene
// Add physics bodies
guard let ballsNode = scene.rootNode.childNode(withName: "balls", recursively: true) else { return }
let forceDirection = SCNVector3Make(0, 3, 0)
for ballNode in ballsNode.childNodes {
let physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)
physicsBody.applyForce(forceDirection, asImpulse: true)
ballNode.physicsBody = physicsBody
}
在 View didLoad 中试试这个。希望这有效。
【讨论】:
ballsNode.position.x获取ballsNode的当前轴并移动球。
获得所需内容的最佳方式是使用在 Autodesk Maya、Autodesk 3dsMax 或 Maxon Cinema4D 等 3D 应用程序中制作的
predefined animation or dynamics。
制作球动画(或动态,由您决定)后,您需要烘焙此动画(烘焙是为每一帧生成关键帧的过程,而不是使用插值曲线)并将此场景导出为.dae 文件格式。 ARKit/SceneKit不仅支持.dae动画,还支持全新格式.usdz。
SceneKit API(以及其他 Apple 框架的 API)不是为 3D 动画设计的。
【讨论】: