通过物理控制对象

时间:2014-10-30 07:32:48

标签: ios scenekit scnnode

我在Apple文档(Scene Kit Vehicle)中读到了这个例子,他们在车上使用了SCNPhysicsVehicle。 SCNPhysicsVehicle允许设置速度,刹车和一切。我希望能够控制SCNNode(包含SCNSphere)。物理学的方法是什么?

1 个答案:

答案 0 :(得分:1)

仅当您希望场景中的元素表现得像轮式车辆时才使用SCNPhysicsVehicle - 在发动机转速,制动和转向方面控制它,并在车轮移动时显示轮子并且在它转向时转动。

为了更简单地对场景中的元素进行基于物理的控制,请创建SNCPhysicsBody并将其附加到您想要物理行为的节点。然后,要将其设置为运动,对其施加力或冲动,直接设置其velocity,将其设置为collide与其他物体,或者让它因场景的{{3}而下降}。物理学与一个答案相关的东西太多了 - 请阅读gravity以查看全部内容。

如果你正在寻找专门用于操纵杆/倾斜控制的话,那么有很多方法可以去,这取决于你正在寻找什么样的游戏玩法“感觉”。但是有一些共同的主题:

你可以做的一件事就是根据操纵杆方向对每一帧施加一个力;例如在您的更新方法中:

GCControllerAxisInput *joystickX = controllers[0].extendedGamepad.xAxis;
[sphereNode.physicsBody applyForce:SCNVector3(xAxis.value * SCALE_FACTOR, 0, 0) impulse:NO];

使用此选项,将操纵杆朝向一个方向或另一个方向就像射击推进器:您将球杆移动得越来越快,您将操纵杆保持在特定方向的时间越长(越强)。并且你必须在相反的方向上握住操纵杆以施加足够的反向力来阻止那个疯狂的东西。

另一种方法是直接设置速度:

sphereNode.physicsBody.velocity = SCNVector3(xAxis.value * SCALE_FACTOR, 0, 0);

使用此选项,当您不按下操纵杆时,球体保持静止状态,并且在推动操纵杆时移动速度越快,最高速度为SCALE_FACTOR

(在这两个示例中,SCALE_FACTOR都可以将操纵杆的-1到1范围转换为对您的游戏有意义的单位。)

还有很多其他选项 - 例如,您可以自己动手来计算操纵杆位置和当前方向/速度之间的差值 - 尝试一些以找出最适合您正在寻找的游戏玩法