【问题标题】:Apply a constant force to a SCNnode using sceneKit使用 sceneKit 对 SCNnode 施加恒定的力
【发布时间】:2021-05-20 06:44:45
【问题描述】:

我正在尝试使用 ARKit 和 SceneKit 制作无人机模型。

现在我可以成功地将无人机放置在一个表面上,模拟碰撞末端检测底座和无人机之间的接触。

现在我想尝试驾驶这架无人机,施加一些恒定的力量! (我不想简单地移动 Y 轴来向上移动无人机)但我想模拟一个力将它拉起来,就像它发生在现实生活中一样。

我开始写一些代码,当我按下向上按钮时调用这个方法..

// hit test and find object with specific name
    func applyForceToDrone() {
        print("tapped apply force drone at position ")
        
        let nodo = arrayDrone[0] // return the scnNode of the Drone in the scene
        let force = SCNVector3(0, 15, 0)
        
        print("appply force")
        nodo.physicsBody?.applyForce(force, asImpulse: false)
            
        
    }

这段代码的结果是每次我按下向上按钮时无人机都会上下跳跃。 但是这个力需要在时间上保持恒定......

我怎样才能不断地施力以使无人机保持在空中?任何提示我如何解决这个问题...

我找不到任何对物体施加恒定力的例子。

感谢您的帮助。

【问题讨论】:

  • 老实说,我无法告诉你为什么它只会上下跳跃。我还在我的一个应用程序中的某些对象上使用了这个 applyForce 命令,但我需要相反,设置 asImpulte = true。此时您可能会遇到一些问题。除 SCNPhysics 引擎外,不得移动包含动态物理体的对象。因此,如果您想让您的无人机飞行并控制方向,您将需要另一种方法。在 Apple 的 FOX 示例游戏中,您可以找到一些他们如何控制角色的方法。想象一下你的无人机也是如此,但在 ARKit 中。它使用.kinematic body。

标签: swift xcode sprite-kit scenekit arkit


【解决方案1】:

您必须在循环函数之一内施加力。为此,请定义一个变量 var applyForce=false。然后在例如 buttonUp 触摸开始时,设置 applyForce=true,在触摸结束时设置 applyForce=false。然后在循环函数内部:如果 applyForce 则施加力。你必须调整力量的大小。您还可以添加更多参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2018-06-20
    • 1970-01-01
    • 2018-03-28
    • 2021-05-22
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多