首页 > 解决方案 > SceneKit:旋转节点但定义目标角度

问题描述

编辑:我已经解决了这个问题,并将在接下来的几天内发布解决方案。


我正在构建类似于 Apple 的 Activity 应用程序的 3D 成就。

我已经加载了我的 3D 模型(带有单个节点的场景),可以显示它,并且可以点击它来施加旋转力:

@objc func objectTapped(_ gesture: UITapGestureRecognizer) {
    let tapLocation = gesture.location(in: scnView)
    let hitResults = scnView.hitTest(tapLocation, options: [:])

    if let tappedNode = (hitResults.first { $0.node === badgeNode })?.node {
        let pos = Float(tapLocation.x) - tappedNode.boundingBox.max.x
        let tappedVector = SCNVector4(x: 0, y: pos, z: 0, w: 0.1)
        tappedNode.physicsBody?.applyTorque(tappedVector,
                                            asImpulse: true)
    }
}

这工作正常。现在到棘手的部分:

我希望节点旋转直到它显示其正面或背面(如在活动应用程序中),然后它应该停止。它应该自然停止,这意味着它可以稍微过冲然后返回。

用图片来描述它——在这里我将节点保持在这个位置......

...如果我放开节点,它将旋转以显示正面,其中包括一点点过冲。这是结束位置:

由于我对 SceneKit 还很陌生,所以我很难弄清楚如何实现这种效果。似乎我可以通过使用像重力场这样的 SceneKit 对象来实现这一点,而不必自己计算很多东西,或者至少这是我所希望的。

我不一定要求一个完整的解决方案,我基本上只需要一个正确的方向。提前致谢!

标签: swiftscenekit

解决方案


推荐阅读