ios - 用物理学控制一个物体

标签 ios scenekit scnnode

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

最佳答案

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

为了对场景中的元素进行更简单的基于物理的控制,创建一个 SNCPhysicsBody并将其附加到您想要物理行为的节点。然后,要使其运动,对其施加力或脉冲,直接设置其速度,将其设置为collide。与其他 body 一起,或者由于场景的gravity而让它掉落.与物理学有关的事情太多了,无法用一个答案来概括——阅读 SCNPhysicsBody Class Reference查看所有内容。

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

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

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

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

关于ios - 用物理学控制一个物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26647351/

相关文章:

ios - URL IOS 中的 NSRegularExpression

ios - NSUserDefaults 以外的本地键值存储

ios - Scenekit 错误 : Inconsistency in scene graph found in C3DNode finalize - clueless

swift - 如何在 swift 中使用 SCNMaterial 创建 NEON Material ?

ios - UITableView 还是 Collection View ?

ios - UITableView 在半透明的导航栏下

ios - 我正在尝试将命令从 SKScene(SpriteKit) 传递到 SCNScene(SceneKit)

swift - SCNIKConstraint 如何工作?

ios - 从 SCNPhysicsBallSocketJoint 中移除弹性

scenekit - 如何在 SceneKit 中将 allowedCameraControl 与相机节点一起使用