SceneKit – 制作自定义物理体
SceneKit – Making a custom physics body
所以我设计了一个走廊,我想让我的玩家穿过,但我可以
似乎需要一个物理机构来为它工作。玩家要么穿过墙壁,要么不能走下走廊,因为它会将物体视为一个巨大的立方体。我如何让物理体绕过物体。
let chessPieces = SCNScene(named: "art.scnassets/hallway.dae")
if let knight2 = chessPieces?.rootNode.childNodeWithName("Room", recursively: true) {
knight2.position = SCNVector3Make(150, 30, 0)
knight2.scale = SCNVector3Make(knight2.scale.x * 200, knight2.scale.y * 200, knight2.scale.z * 200)
var nodeScale = NSValue(SCNVector3:SCNVector3Make(200, 200, 200));
var nodeGeometry = knight2.geometry;
var shape = SCNPhysicsShape(geometry: nodeGeometry!, options: [SCNPhysicsShapeScaleKey:nodeScale])
knight2.physicsBody = SCNPhysicsBody(type:SCNPhysicsBodyType.Static, shape: shape)
knight2.physicsBody?.categoryBitMask = rockCategory
knight2.physicsBody?.angularVelocityFactor = SCNVector3Make(0.0,0.0,0.0)
knight2.physicsBody?.collisionBitMask = 3
knight2.name = "Student"
knight2.physicsBody?.mass = 1000
scene?.rootNode.addChildNode(knight2)
}
SceneKit 物理体模拟实体形状。如果您尝试对一个由边界包围的开放 space 建模——例如房间或走廊——单个物理体将无济于事。这将用一个不可通过的区域填充房间的体积,并且其他物理物体(具有重叠的碰撞遮罩)将被迫离开该区域。
如果要创建一个由边界封闭的开放space,您需要为边界创建物理体。 SceneKitVehicle 示例代码演示了如何执行此操作,为房间的地板和墙壁创建单独的物理体,每个物理体使用 SCNFloor
和 SCNBox
几何体。
所以我设计了一个走廊,我想让我的玩家穿过,但我可以 似乎需要一个物理机构来为它工作。玩家要么穿过墙壁,要么不能走下走廊,因为它会将物体视为一个巨大的立方体。我如何让物理体绕过物体。
let chessPieces = SCNScene(named: "art.scnassets/hallway.dae")
if let knight2 = chessPieces?.rootNode.childNodeWithName("Room", recursively: true) {
knight2.position = SCNVector3Make(150, 30, 0)
knight2.scale = SCNVector3Make(knight2.scale.x * 200, knight2.scale.y * 200, knight2.scale.z * 200)
var nodeScale = NSValue(SCNVector3:SCNVector3Make(200, 200, 200));
var nodeGeometry = knight2.geometry;
var shape = SCNPhysicsShape(geometry: nodeGeometry!, options: [SCNPhysicsShapeScaleKey:nodeScale])
knight2.physicsBody = SCNPhysicsBody(type:SCNPhysicsBodyType.Static, shape: shape)
knight2.physicsBody?.categoryBitMask = rockCategory
knight2.physicsBody?.angularVelocityFactor = SCNVector3Make(0.0,0.0,0.0)
knight2.physicsBody?.collisionBitMask = 3
knight2.name = "Student"
knight2.physicsBody?.mass = 1000
scene?.rootNode.addChildNode(knight2)
}
SceneKit 物理体模拟实体形状。如果您尝试对一个由边界包围的开放 space 建模——例如房间或走廊——单个物理体将无济于事。这将用一个不可通过的区域填充房间的体积,并且其他物理物体(具有重叠的碰撞遮罩)将被迫离开该区域。
如果要创建一个由边界封闭的开放space,您需要为边界创建物理体。 SceneKitVehicle 示例代码演示了如何执行此操作,为房间的地板和墙壁创建单独的物理体,每个物理体使用 SCNFloor
和 SCNBox
几何体。