현재 벽, 천장 및 바닥면이 3 개 밖에없는 장면을로드하려고 시도하고 있습니다. 믹서기에서 만든 장면을로드하고 잘로드합니다. 그러나 SCNBox
의 기하학을 가진 SCNNode
은 바로 통과합니다. 상자에 부착 된 동적 물리학 몸체가 있고 나는 수동으로 walls/floor
을 정적 노드로 설정하고 있습니다. 다음은 장면을 설정하고 상자를 추가하는 데 사용하는 코드입니다. 필요한 경우 내 .dae
을 게시 할 수도 있습니다. 누구나 무슨 일이 벌어 질지에 대한 아이디어가 있습니까?물리학 문제 .dae에서 SCNScene을로드 할 때
//Load the scene from file
SCNScene *scene = [SCNScene sceneNamed:@"mainScene.dar"];
//Get each node in the scene, and give it a static physics bodt
for (SCNNode *node in [[scene rootNode] childNodes]) {
SCNPhysicsBody *staticBody = [SCNPhysicsBody staticBody];
staticBody.restitution = 1.0;
node.presentationNode.physicsBody = staticBody;
NSLog(@"node.name %@",node.name);
}
//Create box
SCNNode *block = [SCNNode node];
block.position = SCNVector3Make(0, 0, 3);
//Set up the geometry
block.geometry = [SCNBox boxWithWidth:.8 height:.8 length:.8 chamferRadius:0.05];
block.geometry.firstMaterial.diffuse.mipFilter = SCNFilterModeLinear;
block.castsShadow = YES;
//Make it blue
for (SCNMaterial *mat in block.geometry.materials) {
mat.emission.contents = [UIColor blueColor];
}
//Add physics body
SCNPhysicsBody *body = [SCNPhysicsBody staticBody];
body.mass = 5;
body.restitution = .7;
body.friction = 0.5;
block.physicsBody = body;
//Add the node to the scene
[[scene rootNode] addChildNode:block];
답변 : ricksters 답변에 대한 답변으로 각 새 노드에 대한 맞춤형 지오메트리를 만들려고했으나 상자가 계속 떨어졌습니다. 다음은 사용자 정의 지오메트리에 사용하는 코드입니다. 이렇게하면 원래 코드의 for-in을 대체합니다.
//Get each node in the scene, and give it a static physics bodt
for (SCNNode *node in [[scene rootNode] childNodes]) {
SCNGeometry *geometry = [SCNBox boxWithWidth:node.scale.x height:node.scale.y length:node.scale.z chamferRadius:0.0];
SCNPhysicsShape *physicsShape = [SCNPhysicsShape shapeWithGeometry:geometry options:nil];
SCNPhysicsBody *staticBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeStatic shape:physicsShape];
staticBody.restitution = 1.0;
node.physicsBody = staticBody;
}
맞춤 지오메트리를 추가하려고했지만 내 상자가 계속 떨어지는 경우 원래의 질문에 수정하여 새 코드를 추가했습니다. – Jeremy1026