0

我阅读了苹果文档(Scene Kit Vehicle)中的示例,他们在车辆上使用了 SCNPhysicsVehicle。SCNPhysicsVehicle 允许设置速度、刹车和一切。我希望能够控制一个 SCNNode(包含一个 SCNSphere)。物理有什么办法做到这一点?

4

1 回答 1

1

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

要对场景中的元素进行更简单的基于物理的控制,请创建一个SNCPhysicsBody并将其附加到您想要物理行为的节点。然后,为了让它运动,对它施加力或冲量,直接设置它velocity,设置它与其他物体碰撞,或者只是让它由于场景的gravity. 与物理学有关的事情太多,无法在一个答案中找到——阅读SCNPhysicsBody 类参考以查看所有内容。

如果您正在寻找专门的操纵杆/倾斜控制,即使如此,也有多种方法可供选择,具体取决于您正在寻找什么样的游戏“感觉”。但是有一些共同的主题:

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

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 范围转换为对您的游戏有意义的单位。)

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

于 2014-10-30T19:27:40.453 回答