【发布时间】:2020-04-16 16:15:38
【问题描述】:
我想做的事:
我创建了两个SCNNodes 和对应的SCNPhysicsBodys(都是动态的和受重力影响的),我想使用SCNPhysicsHingeJoint 连接它们。只是为了测试一下node1 有一个额外的关节,以便固定在场景中并且不会因重力而掉落。这些节点通过joint 相互连接。所以当我开始场景时,node1 只是固定在场景中,node2 是向下悬挂的。现在我想确定拉动关节的力应该等于-9.8(假设没有摆动)因为gravitational acceleration is equals -9.8(gravity属性的默认值)和默认质量等于1其中拉关节的力应为-9.8。不过,我不想计算拉力,因为我的场景要变得相当复杂。 因此我想知道是否有一种属性或方法可以计算两个节点之间的拉力以及通过关节连接的物理体?
let node1 = SCNNode(geometry: SCNCylinder(radius: 0.125, height: 2))
node1.position.x = -1.625
node1.rotation = SCNVector4(1, 0, 0, Float.pi/2)
node1.physicsBody = SCNPhysicsBody(type: .dynamic, shape: SCNPhysicsShape(geometry: node1.geometry!, options: nil))
node1.physicsBody!.isAffectedByGravity = true
node1.physicsBody!.categoryBitMask = 1
node1.physicsBody!.contactTestBitMask = 1
node1.physicsBody!.collisionBitMask = 1
rootNode.addChildNode(node1)
let node2 = SCNNode(geometry: SCNBox(width: 3, height: 0.25, length: 2, chamferRadius: 0))
node2.physicsBody = SCNPhysicsBody(type: .dynamic, shape: SCNPhysicsShape(geometry: node2.geometry!, options: nil))
node2.physicsBody!.isAffectedByGravity = true
node2.physicsBody!.categoryBitMask = 1
node2.physicsBody!.contactTestBitMask = 1
node2.physicsBody!.collisionBitMask = 1
rootNode.addChildNode(node2)
let irrelevantJoint = SCNPhysicsHingeJoint(body: node1.physicsBody!, axis: SCNVector3(0, 1, 0), anchor: SCNVector3(0, 0, -0.125))
physicsWorld.addBehavior(irrelevantJoint)
let joint = SCNPhysicsHingeJoint(bodyA: node1.physicsBody!, axisA: SCNVector3(0, 1, 0), anchorA: SCNVector3(0, 0, 0.125),
bodyB: node2.physicsBody!, axisB: SCNVector3(0, 0, 1), anchorB: SCNVector3(-1.5, 0, 0))
physicsWorld.addBehavior(joint)
我尝试了什么:
我希望我可以使用SCNPhysicsContactDelegate 和physicsWorld(_:didEnd:) 来获得joint 的力量(或冲动)。每当该方法被调用时,就会创建一个 SCNPhysicsContact,它允许您访问它的 collisionImpulse 属性,所以我希望有一个负面的冲动,但事实并非如此。我刚刚得到 0 和 collisionImpulse。关于如何获得通过关节连接的两个物理体之间的拉力的任何想法?
【问题讨论】:
-
您确定选择了正确的仪器吗? *SCNPhysicsHingeJoint* 一种物理行为,它连接两个物体并允许它们在一个轴上相互绕轴转动。 因此这两个物体之间不可能发生碰撞,不是吗?
-
是的,我认为是。我希望两个节点(及其物理体)相互连接,
node2应该围绕node1摆动。 另外我想确定拉那个枢轴的力或node1
标签: swift scenekit game-physics